为什么 req.params 返回未定义
Why is req.params returning undefined?
我在这里检查了两个类似的问题,评论中建议的内容都不适合我。
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] });
}
});
});
如您所见,我尝试将结果记录到控制台以查看发生了什么。访问有问题的 URL 只会使页面加载,直到超时。在控制台中,我得到"未定义"。
如何定义 req.params?或者它的定义被拉到哪里,为什么它不返回值?
完整上下文:http://pastebin.com/DhWrPvjP
刚刚测试了您的代码,它工作正常。我认为您可能缺少网址参数。它应该是http://localhost:3000/1
- 或者您尝试检索的任何 ID。试试吧。
此外,您应该将扩展选项传递给您的bodyParser.urlencode方法:express抛出错误为"body-parser 已弃用未定义的扩展">
编辑:专门回答有关定义请求参数的问题。您无需执行任何操作即可定义请求参数,只需确保传入正确的 URL。Express 负责解析 URL 并为您定义请求参数。因此,如果您转到服务器上的 URL http://localhost/jimbob
,则为 id
参数传入的值将作为 req.params.id
提供。有关详细信息,请参阅有关请求参数的此链接。
编辑 2:您可以尝试调试您的应用程序以查看您得到的结果。下面是有关如何在 Express 中启用调试以及如何使用节点检查器进行调试的链接。我看到你在 Ubuntu 上运行这个。所以,那里可能有一些我不知道的奇怪东西。(我在Mac上运行它。
我还会检查您在应用程序运行的计算机上运行的 Node 版本,并检查您的 Ubuntu 环境(或应用程序无法运行的任何计算机(上的 Node 版本。
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,参数直接从 url 字符串中提取,如果您尝试使用 post 或 get 方法发送信息,您想分别使用 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] });
}
});
});
试试这个req.param('id')
:D。它可能对您有用
我迟到了,但这篇文章帮助我调试了我的问题,所以我想我会添加我的建议,希望它能帮助其他人。
如果您使用带有承诺的 mysql2
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();
然后,您需要在请求中使用承诺。
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()
。希望这有所帮助,因为这篇文章帮助我进行了调试。
- 这.SOMETHING 总是返回未定义的 - extjs
- React+Meteor:this.ops返回未定义
- "日期“;AJAX请求返回的类型值未定义
- Regex提取URL返回数组的一部分;未定义”;
- 换行符拆分返回“”;未定义”;
- 解析-为什么user.getSessionToken()返回未定义的结果
- Javascript函数返回未定义
- JavaScript-获取数据属性的值返回未定义的值
- .val()返回未定义的.text返回随机代码
- 为什么innerHTML返回“未定义”
- "这个“;正在返回未定义的
- 函数jquery的未定义返回
- 为什么typeof的数组的数组的未定义值返回为“0”;未定义的“;我的条件不认为是真的
- winJS 从函数未定义返回 var
- $.get jquery 中的未定义返回
- Javascript 函数未定义返回
- 数据 ID 一直未定义返回
- 函数调用Javascritpt的未定义返回值
- 在函数中提示未定义返回.(问题)范围
- JSON字符串的未定义返回