Node.js 在NodeJS中的函数之间传递变量
我遵循这个()节点教程,因为我必须为朋友构建一个web应用程序。他需要使用Dynamo DB和node js,我在构建这个应用程序时正在学习,我做得很好,但现在我被卡住了 我正在尝试获取JWT令牌(如视频中所述),但什么也没发生。这是我的路线:Node.js 在NodeJS中的函数之间传递变量,node.js,express,passport.js,Node.js,Express,Passport.js,我遵循这个()节点教程,因为我必须为朋友构建一个web应用程序。他需要使用Dynamo DB和node js,我在构建这个应用程序时正在学习,我做得很好,但现在我被卡住了 我正在尝试获取JWT令牌(如视频中所述),但什么也没发生。这是我的路线: router.post('/authenticate', (req, res, next) => { const username = req.body.username; const password = req.body.passwor
router.post('/authenticate', (req, res, next) => {
const username = req.body.username;
const password = req.body.password;
USER.getUserByUsername(username, (err, user) => {
if (err) throw err;
if (!user) {
return res.json({
success: false,
"msg": "User not found"
});
}
User.comparePassword(password, user.password, (err, isMatch) => {
if (err) throw err;
if (isMatch) {
const token = jwt.sign(user, secret.secret, {
expiresIn: 86400
});
res.json({
success: true,
token: 'JWT ' + token,
user: {
user: user.username,
password: user.password,
email: USER.email
}
});
}
});
});
});
这是护照代码
module.exports = function (passport) {
let opts = {};
opts.jwtFromRequest = ExtractJwt.fromAuthHeaderWithScheme('jwt');
opts.secretOrKey = secret;
passport.use(new JwtStrategy(opts, (jwt_payload, done) => {
USER.getUserbyUsername(jwy_payload.user2, (err, user) => {
if (err) {
return done(err, false);
}
if (user) {
return done(null, user);
} else {
return done(null, false);
}
});
}));
}
下面是model user.js中的函数
module.exports.getUserByUsername = function (user, callback) {
var docClient = new AWS.DynamoDB.DocumentClient();
var params = {
TableName: "Usuarios",
KeyConditionExpression: "#us = :uuuu",
ExpressionAttributeNames: {
"#us": "username"
},
ExpressionAttributeValues: {
":uuuu": user
}
};
docClient.query(params, function (err, data) {
if (err) {
console.error("Unable to query. Error:", JSON.stringify(err, null, 2));
} else {
data.Items.forEach(function (item) {
console.log(item.username + ": " + item.password);
let user = item.username;
console.log(user);
return user;
});
}
});
}
最后一个函数打印用户名+密码,因此查询正在运行,但仅此而已,在通过Postman传递用户名和密码后,我没有得到任何响应
谢谢大家 您似乎没有呼叫回调
docClient.query(参数、函数(错误、数据){
如果(错误){
错误(“无法查询。错误:”,JSON.stringify(err,null,2));
}否则{
data.Items.forEach(函数(项){
console.log(item.username+“:”+item.password);
让user=item.username;
console.log(用户);
返回用户;
});
}
});代码>您似乎没有调用回调
docClient.query(参数、函数(错误、数据){
如果(错误){
错误(“无法查询。错误:”,JSON.stringify(err,null,2));
}否则{
data.Items.forEach(函数(项){
console.log(item.username+“:”+item.password);
让user=item.username;
console.log(用户);
返回用户;
});
}
});
在data.Items.forEach()
中,您希望返回用户做什么?return
仅从.forEach()
回调返回,而不是从外部函数本身返回。您不调用传递到getUserByUsername
任何位置的回调。尝试将return移到forEach外部,未发生任何更改:(对不起@t.niese我对所有这些编码还是新手,你能给出你的答案吗?return user
在data.Items.forEach()
?那return
只是从.forEach()返回的。)
回调,而不是从外部函数本身。您不会调用传递到getUserByUsername
的回调。尝试将返回移到forEach之外,未发生任何更改:(对不起@t.niese我对所有这些编码内容还是新手,请开发您的答案好吗?可能重复