关于Nodejs中url传值的问题,求大神解答

关于Nodejs中url传值的问题,求大神解答

var crypto = require(‘crypto’), News = require(’…/models/news.js’);

module.exports = function(app){ app.get(’/article’, function(req, res) { var msg ={}; if(req.query.section) { msg.section = req.query.section; } if(req.query.id) { msg.id = req.query.id; } News.get(msg, function(err, news) { if(err) { req.flash(‘error’, err); res.redirect(’/’); } res.render(‘article’, { title: ‘主页’, news: news }); }); });

app.get(’/section’, function(req, res) { res.render(‘section’, { title: ‘section’ }); }); }; 我在section页面通过<a href="/article?id=1">点击这里</a>来设置id的值,但是在article里面可以检测到req.query.id的值,并且msg.id也为1,但 就是查询不到数据库中的内容,如果直接把msg.id赋值为1,就可以查询到,这是为何…… 求大神解答呀! (New.get()是获取数据库中新闻的函数)


4 回复

从你描述的问题来看,问题可能出在News.get(msg, callback)方法的实现上。为了更好地理解这个问题,我们首先需要检查几个关键点:

  1. 确保msg对象正确构建:你已经确认了当通过URL参数传递id时,msg.id能够正确地接收到该值。
  2. 检查News.get()方法的实现:我们需要确保这个方法能正确处理包含id的对象。

示例代码

首先,让我们假设News.get()方法的实现如下:

// 假设这是你的News模型文件中的方法
News.get = function(query, callback) {
    // 这里应该有一个数据库查询语句,例如:
    var id = query.id;
    var section = query.section;

    // 假设使用的是MongoDB和mongoose
    this.findOne({ _id: id, section: section }, function(err, news) {
        if (err) return callback(err);
        callback(null, news);
    });
};

调试步骤

  1. 检查News.get()的输入参数:确保传递给News.get()的方法参数msg是正确的。
  2. 检查数据库查询条件:确保查询条件(例如_idsection)与数据库中的数据匹配。

示例调试

你可以添加一些日志输出来帮助调试:

News.get = function(query, callback) {
    console.log("Query received:", query); // 打印接收到的查询条件
    var id = query.id;
    var section = query.section;

    // 检查是否正确接收到了id和section
    if (!id || !section) {
        return callback(new Error("Invalid query parameters"));
    }

    // 假设使用的是MongoDB和mongoose
    this.findOne({ _id: id, section: section }, function(err, news) {
        if (err) return callback(err);
        callback(null, news);
    });
};

调用示例

在你的路由处理程序中,确保传递给News.get()的参数是正确的:

app.get('/article', function(req, res) {
    var msg = {};
    if (req.query.section) {
        msg.section = req.query.section;
    }
    if (req.query.id) {
        msg.id = req.query.id;
    }

    News.get(msg, function(err, news) {
        if (err) {
            req.flash('error', err);
            res.redirect('/');
        }
        res.render('article', {
            title: '主页',
            news: news
        });
    });
});

总结

通过上述调试步骤,你应该能够找到问题所在。如果数据库查询没有返回预期的结果,可能是因为查询条件不匹配或数据库中没有满足条件的数据。确保传递给News.get()的参数是正确的,并且数据库中的数据也符合查询条件。


问问题前先学会格式化代码

是1 和 “1” 的问题吧

根据你的描述,问题可能出现在News.get(msg, function(err, news) 这个函数调用上。为了帮助你更好地解决问题,我将提供一个简单的示例来解释如何正确处理URL参数和数据库查询。

假设你有一个简单的数据库查询函数News.get,它接收一个对象作为参数,并使用这些参数从数据库中查询数据。为了确认问题所在,我们可以检查几个关键点:

  1. 确保传递给News.get的参数正确
  2. 确保News.get函数正确处理了这些参数
  3. 确保数据库中有匹配的数据

示例代码

路由处理

const express = require('express');
const News = require('./models/news.js');

const app = express();

app.get('/article', (req, res) => {
    const msg = {};
    
    if (req.query.section) {
        msg.section = req.query.section;
    }
    if (req.query.id) {
        msg.id = req.query.id;
    }

    News.get(msg, (err, news) => {
        if (err) {
            console.error("Error querying the database:", err);
            req.flash('error', err);
            res.redirect('/');
            return;
        }
        
        res.render('article', {
            title: '主页',
            news: news
        });
    });
});

app.get('/section', (req, res) => {
    res.render('section', {
        title: 'section'
    });
});

module.exports = app;

数据库查询函数

const db = require('./db'); // 假设你有一个数据库连接模块

function getNews(query, callback) {
    const sql = "SELECT * FROM news WHERE section = ? AND id = ?";
    db.query(sql, [query.section, query.id], (err, results) => {
        if (err) return callback(err);
        callback(null, results);
    });
}

module.exports = { get: getNews };

检查步骤

  1. 检查URL参数:确保请求的URL确实包含了正确的idsection参数。
  2. 调试数据库查询:确保数据库查询语句是正确的,并且确实能够匹配到数据。
  3. 日志输出:可以在News.get函数内部添加日志输出,以确认传入的参数是否正确。

通过这些步骤,你可以更好地定位问题的原因,并解决它。希望这可以帮助你解决问题!

回到顶部