关于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()是获取数据库中新闻的函数)
从你描述的问题来看,问题可能出在News.get(msg, callback)
方法的实现上。为了更好地理解这个问题,我们首先需要检查几个关键点:
- 确保
msg
对象正确构建:你已经确认了当通过URL参数传递id
时,msg.id
能够正确地接收到该值。 - 检查
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);
});
};
调试步骤
- 检查
News.get()
的输入参数:确保传递给News.get()
的方法参数msg
是正确的。 - 检查数据库查询条件:确保查询条件(例如
_id
和section
)与数据库中的数据匹配。
示例调试
你可以添加一些日志输出来帮助调试:
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
,它接收一个对象作为参数,并使用这些参数从数据库中查询数据。为了确认问题所在,我们可以检查几个关键点:
- 确保传递给
News.get
的参数正确。 - 确保
News.get
函数正确处理了这些参数。 - 确保数据库中有匹配的数据。
示例代码
路由处理
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 };
检查步骤
- 检查URL参数:确保请求的URL确实包含了正确的
id
和section
参数。 - 调试数据库查询:确保数据库查询语句是正确的,并且确实能够匹配到数据。
- 日志输出:可以在
News.get
函数内部添加日志输出,以确认传入的参数是否正确。
通过这些步骤,你可以更好地定位问题的原因,并解决它。希望这可以帮助你解决问题!