将JSON从模型传递到路由不起作用
我试图将一个对象从一个模型传递到我的路由,这样我就可以完成我的登录系统,但我没有收到任何东西 型号代码:将JSON从模型传递到路由不起作用,json,node.js,express,passport.js,Json,Node.js,Express,Passport.js,我试图将一个对象从一个模型传递到我的路由,这样我就可以完成我的登录系统,但我没有收到任何东西 型号代码: const AWS = require('aws-sdk'); const bcrypt = require('bcryptjs'); const config = require('../config/config.json'); var dynamoose = require('dynamoose'); const express = require('express'); var Sc
const AWS = require('aws-sdk');
const bcrypt = require('bcryptjs');
const config = require('../config/config.json');
var dynamoose = require('dynamoose');
const express = require('express');
var Schema = dynamoose.Schema;
const USER_SCHEMA = new Schema({
username: {
type: String,
required: true
},
firstName: {
type: String
},
lastName: {
type: String
},
email: {
type: String,
required: true
},
credential: {
type: String
},
password: {
type: String,
required: true
}
})
const USER = module.exports = dynamoose.model('Usuarios', USER_SCHEMA);
module.exports.getUserByUsername = function (user, callback) {
var docClient = new AWS.DynamoDB.DocumentClient();
var params = {
TableName: "Users",
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 (user, callback) {
console.log(user.username + ": " + user.password + user.email + user.firstName);
});
}
callback(null, user);
});
}
这很好,我可以打印user.username、user.password等,但由于某些原因,我的路由器没有导入JSON
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({
username: user
}, secret.secret, {
expiresIn: 86400
});
res.json({
success: true,
token: 'JWT ' + token,
user: {
user: user.username,
password: USER.password,
email: user.email
}
});
} else {
return res.json({
success: false,
msg: 'Wrong password'
})
}
});
});
});
comparePassword中的res.json应该是路由(即用户模型)中的对象,但没有接收到任何东西。我尝试过USER.username/email/etc USER.username/email/etc,但没有任何效果。我知道我肯定在什么地方漏掉了什么,但在哪里
这是res.json的响应
{
"success": true,
"token": "JWT eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6Im5pY29sYXMuZ2FyY2lhIiwiaWF0IjoxNTA5ODE5NjMxLCJleHAiOjE1MDk5MDYwMzF9.ubHbqwOZznoeR0C-FkUoX83MoYPomk5SW1ThIA7ww74",
"user": {}
}
当然,空用户应该是用户对象
修正: 首先,我使用的是
forEach
,因此我必须传递一个索引(user.Item[0].username
),然后我发现我可以使用一个简单的.get
函数使用Dynamo DB查询一个项目
现在的型号:
module.exports.getUserByUsername = function (user, callback) {
var docClient = new AWS.DynamoDB.DocumentClient();
var params = {
TableName: 'Users',
Key: {
"username": user
}
};
docClient.get(params, function (err, user) {
if (err) {
console.error("Unable to read item. Error JSON:", JSON.stringify(err, null, 2));
} else {
callback(null, user);
}
});
}
顺便说一下,Dynamo DB将项目作为项目返回,因此我现在的路线:
USER.comparePassword(password, user.password, (err, isMatch) => {
if (err) throw err;
if (isMatch) {
const token = jwt.sign({
username: user
}, secret.secret, {
expiresIn: 86400
});
res.json({
success: true,
token: 'JWT ' + token,
user: {
user: user.Item.username,
password: user.Item.password,
email: user.Item.email,
firstName: user.Item.firstName,
lastName: user.Item.lastName,
credential: user.Item.credential
}
});
}
我还认为您必须更改comparePassword以匹配以下更改
//change comparePassword
USER.comparePassword(password, user, (err, isMatch) => {
if (err) throw err;
if (isMatch) {
const token = jwt.sign({
username: user
}, secret.secret, {
expiresIn: 86400
});
res.json({
success: true,
token: 'JWT ' + token,
user: {
user: user.username,
password: user.password,
email: user.email
}
});
} else {
return res.json({
success: false,
msg: 'Wrong password'
})
}
});
当您在回调中返回用户对象时,它不在范围内
docClient.query(params, function (err, data) {
if (err) {
console.error("Unable to query. Error:", JSON.stringify(err, null, 2));
} else {
data.Items.forEach(function (user, callback) {
// user exists in this scope
console.log(user.username + ": " + user.password + user.email + user.firstName);
// something like...
if(user) return callback(null, user)
});
}
// user is undefined here
// callback(null, user);
});
USER.password
应该是USER.password
?不。这很好,因为我正在通过邮递员传递用户名和密码,而express正在解析该信息,但电子邮件是问题所在。您能确认“USER.username”、“password:USER.password”是否正确吗和user.email在json和您的expressjs版本中不是空的?我发现了错误,我正在从forEach返回对象,我需要传递一个索引。响应:{“success”:true,“token”:"JWT eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.EYJ1C2VYBMFtzSi6EYJJDGVTCY6W3SiY3JLZVVVZC3Dvc3dVc3dIgIgIgIgMmKmMeKmTakingNyOf0WZHTURG91RdJJmKmZHzHzH0mKmKmKmWg2Wg2WmKmWg2WmKmKmKmWg2Wg2Wg2WmKmKmKmKmWg2Wg2Wn2Wg2Of2Of9WnWnWnWmKmKmKmKmKmKmKmKmKmKmKmKmKmKmKmWn2WnWnWnWnWnWnWnWbnqiojesilnjyw5uzwrdb3vudci6mx0simlhdci6mtuwotgymdc3mywizzhwijoxnta5ota3mtczfq.msuylqxfmojuxlkv12ypioopbzwm0helef1xtjw,“用户”:{}空用户:(