我在这里检查了两个类似的问题,评论中建议的内容都不适合我。
app.get('/:id', function(req,res) {
console.log(req.params.id);
});
app.get('/:id', function(req, res) {
db.query("SELECT * FROM entries WHERE id = $1", [req.params.id], function(err, dbRes) {
if (!err) {
res.render('show', { entry: dbRes.rows[0] });
}
});
});
如您所见,我已尝试将结果记录到控制台以查看正在进行的操作。访问相关网址只会使页面加载,直到超时为止。在控制台中,我得到了"未定义"。
如何定义req.params?或者它的定义被拉到哪里以及为什么它没有返回值?
答案 0 :(得分:1)
刚刚测试过你的代码,它运行正常。我想你可能会错过你的url参数。它应该是http://localhost:3000/1
- 或者您要检索的任何ID。尝试一下。
此外,您应该将扩展选项传递给bodyParser.urlencode方法:express throws error as `body-parser deprecated undefined extended`
编辑:专门回答有关定义请求参数的问题。除了确保传入正确的URL之外,您无需执行任何操作来定义请求参数。 Express负责解析URL并为您定义请求参数。因此,如果您转到服务器上的网址http://localhost/jimbob
,则id
参数的传入值将以req.params.id
的形式提供。有关详细信息,请参阅request parameters上的此链接。
编辑2 您可以尝试调试您的应用以查看您获得的内容。以下是有关如何enable debugging in Express以及如何使用node-inspector进行调试的链接。我看到你在Ubuntu上运行它。所以,那里可能有一些我不知道的奇怪之处。 (我在Mac上运行它。)
我还会检查您在应用程序运行的计算机上运行的Node版本,并检查Ubuntu环境中的Node版本(或应用程序无法运行的任何计算机)。
答案 1 :(得分:0)
app.get('/:id', function(req, res) {
db.query("SELECT * FROM entries WHERE id = $1", [req.params.id], function(err, dbRes) {
if (!err) {
res.render('show', { entry: dbRes.rows[0] });
}
});
});
在你的代码中url将是localhost / some-id req.params.id将等于some-id,params直接从url字符串中拉出来,如果你试图用post发送信息或获取你想要的方法分别使用req.body和req.query。我没有看到任何理由除非网址错误否则你无法获得id
或者如果您需要手动执行
app.get('/:id', function(req, res) {
//if no req.params and assuming the id is the last item in the url
var urlArray = req.url.split('/'),
id = urlArray[urlArray.length-1];
db.query("SELECT * FROM entries WHERE id = $1", [req.params.id], function(err, dbRes) {
if (!err) {
res.render('show', { entry: dbRes.rows[0] });
}
});
});
答案 2 :(得分:0)
试试这个req.param('id')
:D。它可能适合你
答案 3 :(得分:0)
我知道我参加晚会很晚,但是这篇文章帮助我调试了问题,因此我认为我会加我的建议,希望对其他人有所帮助。
如果您将mysql2与promises配合使用
const mysql = require("mysql2");
const pool = mysql.createPool({
host: process.env.DB_HOST,
user: process.env.DB_USER,
password: process.env.DB_PASSWORD,
database: process.env.DB_DATABASE
});
module.exports = pool.promise();
然后,您需要在请求中使用Promise。
router.get("/:id", (req, res) => {
mysql
.execute("SELECT * FROM entries WHERE id = $1", [req.params.id])
.then(result => {
res.send(result[0]);
})
.catch(err => {
console.log(err);
});
});
我花了几个小时调试代码,才意识到我在连接中使用promise()
。希望这篇文章对我有所帮助,对您有所帮助。