【发布时间】:2017-04-26 18:45:23
【问题描述】:
我一直在编写一个简单的服务器,并且遇到了一个问题,即我得到一个未定义的回调错误,尽管我的函数头中有一个回调参数。我在 Google 上看到的每个示例都是没有回调参数的人,但我似乎有一个?抛出的错误是 TypeError: callback is not a function。
代码:
app.post("/api/info/", function(req, res){
async.waterfall([
function(callback){
debugger;
jwt.verify(req.body.jwt, secret.secret, {ignoreExpiration: false},
function(err, decoded){
console.log(err);
console.log(decoded.uuid);
debugger;
if(err) {
debugger;
console.log("error1: " + err);
debugger;
res.json({
status: 403
});
res.end();
callback("JWT auth failed", null);
return;
}
debugger;
callback(null, decoded.uuid);
});
},
function(err, token, callback){ //query db for user uuid
debugger;
pool.query("SELECT * FROM users WHERE INSTR (uuid," + "'" + token + "') > 0", function(err, rows){
if(err) console.log(err);
debugger;
callback(rows); //where it errors
});
},
function(rows, callback){ //get user's school name
debugger;
var schoolId = rows[0].chapter_uuid;
pool.query("SELECT * FROM chapters WHERE INSTR (uuid," + "'" + schoolId + "') > 0", function(err, result){
debugger;
callback(rows, result[0].school);
});
},
function(rows, chapter, callback){ //return db results to user in json
debugger;
var canMakeEvent = 0;
if(rows[0].is_board){
canMakeEvent = 1;
}
var info = {
firstName: rows[0].first_name,
lastName: rows[0].last_name,
email: rows[0].email,
chapter: chapter,
isBoard: canMakeEvent,
boardPosition: rows[0].board_position
};
res.json({
status: 200,
info: info
});
res.end();
debugger;
callback(null);
}
], function(err){console.log(err);});
});
【问题讨论】:
-
好的,在哪里你得到错误了吗?
-
代码中有一条注释,就在“SELECT * FROM users WHERE INSTR”的正下方。异步函数的标头是 function(err, token, callback)。抱歉,如果代码难以阅读,stackoverflow 搞砸了制表符/间距。
-
谢谢。我忽略了这一点。这个问题对我来说还不明显。您是否看过回调是什么,是否已定义?一切(例如 JWT 验证)是否按预期工作?我问,因为调用
res.end();后跟callback("JWT auth failed",...让我觉得很不寻常,但也许不一定不正确。 -
控制台记录 JWT 的正文会返回 JWT 中应该包含的内容。回调应该被定义,但是控制台记录它给出了未定义的,即使回调是在错误的函数的方法头中。我看不出回调怎么可能不存在。
标签: javascript mysql node.js async.js