我对node.js还很陌生,我正在努力理解回调是如何工作的。所以,我的问题是:
我应该写更多的代码:
职位:
app.post('/register', function(req, res) {
//get data from the request
var data = {
username: req.body.username,
email: req.body.email,
password: req.body.password
};
function fetchID(callback) {
connection.query('SELECT id_user FROM USERS WHERE username = ?', data.username, function(err, rows) {
if (err) {
callback(err, null);
} else
callback(null, rows[0].id_user);
});
}
var user_id;
fetchID(function(err, content) {
if (err) {
console.log(err);
return next("Mysql error, check your query");
} else {
user_id = content;
console.log(user_id); //undefined
}
});
console.log(user_id); //undefined
var payload = {
iss: req.hostname,
sub: user_id
}
console.log(payload.sub); //correct id
})
获取:
app.get('/todos', function(req, res) {
if (!req.headers.authorization) {
return res.status(401).send({
message: 'You are not authorized !'
});
}
var token = req.headers.authorization.split(' ')[1];
var payload = jwt.decode(token, "shhh..");
//additional level of security
console.log('sub id is : ' + payload.sub); //undefined
if (!payload.sub) {
return res.status(401).send({
message: 'Authentication failed !'
});
}
})
为了更清楚,我对每个console.log都做了注解。我需要得到正确的身份证,当我检查 if (!payload.sub)
在app.get()中
1条答案
按热度按时间sbdsn5lh1#
你的两个函数应该是-
然后
在回调函数中,返回的变量
content
将保留user_id
.编辑
我没有像你上面描述的那样解决这个问题。
但在下面的示例中,我已经说明了回调机制是有效的-
首先(创建表并插入一些伪数据)-
现在我已经把你的post方法作为get,并在浏览器中进行了测试。
下面是在我的localhost中测试的完整类-
现在这些请求将产生这个输出-
http://127.0.0.1:1212/getuser?username=john
=>user id is -1
以及http://127.0.0.1:1212/getuser?username=sham
=>user id is -2
希望这个代码示例能帮助您理解node.js中的回调。谢谢