sta*_*af1 9 javascript node.js express
我的Express.js应用程序一直在投掷Cannot read property 'req' of undefined.实质上,它会侦听GET请求,获取content查询,然后使用表进行回复.这是出现问题的部分.
index.js
var panels = require('./modules/panels.js');
app.get('/panel', function (req, res) {
var user;
if (user = req.session.user) {
panels.getContents(req.query.content, user.innId, res.send);
} else {
res.sendStatus(401);
}
});
Run Code Online (Sandbox Code Playgroud)
模块/ panels.js
exports.getContents = function(panelName, innId, callback) {
var response = "";
switch (panelName) {
case 'tenants':
con.query(queryString, queryParams, function(err, rows) {
if (err) {
handle(err);
} else {
if (rows.length == 0) {
var tenants = 0;
var debtors = 0;
} else {
var tenants = rows[0].tenants;
var debtors = rows[0].length;
}
response = convertToHTMLTable(rows);
}
callback(response); /*THE ERROR POINTS HERE */
});
break;
/* other cases here */
default:
response += "Invalid Request";
callback(response);
}
}
Run Code Online (Sandbox Code Playgroud)
我做错了什么?我的猜测是,我不打算res.send作为回调传递.那么,我该如何解决呢?
Kyl*_*ker 27
我也经历过这个错误,在咀嚼了一下错误信息并且盯着我的代码太久之后,它点击了.
我(和上面的提问者)的代码看起来像这样:
this
问题在于,当res.send稍后被调用时,它与动态范围脱节 - 这意味着send对res方法内部的调用(通常会引用global)现在引用res.send.显然,this.req在this给出错误消息的情况下包含对引用的引用.
等效方案:
somethingAsync
.then(res.send) // <-- storing send() divorced from parent object "res"
}
Run Code Online (Sandbox Code Playgroud)
或者,换句话说:
res = {
send: function() {
console.log(this.originalMessage.req);
},
originalMessage: { req: "hello SO" },
};
res.send();
// # "hello SO"
const x = {};
x.send = res.send;
x.send();
// # Uncaught TypeError: Cannot read property 'req' of undefined
Run Code Online (Sandbox Code Playgroud)
两种解决方案
send
理论上更惯用的方法是
res
那个动态范围的有害的小问题.好像快递应该放弃那里的动态范围,或者至少抛出一个更好的错误......
| 归档时间: |
|
| 查看次数: |
3695 次 |
| 最近记录: |