我是Node.js的初学者,我在这里尝试着我的第一个脚本。我的问题是我想将一个对象推入一个由Mongoose对象定义的数组中。
这是我的对象定义。您将看到三个不同的尝试,(两个已注释),将其推送到generateAuthToken方法的定义中:
const mongoose = require('mongoose');
const validator = require('validator');
const jwt = require('jsonwebtoken');
let UserSchema = new mongoose.Schema({
email: {
type: String,
required: true,
minlength: 1,
trim: true,
unique: true,
validate: {
validator: validator.isEmail,
message: '{VALUE} is not a valid email'
}
},
password: {
type: String,
required: true,
minlength: 6
},
tokens: [{
access: {
type: String,
required: true
},
token: {
type: String,
required: true
}
}]
});
UserSchema.method('generateAuthToken', function() {
// let user = this;
let access = 'auth';
let token = jwt.sign({_id: this._id.toHexString(), access}, 'secret').toString();
console.log(token);
console.log(jwt.verify(token, 'secret'));
console.log(this.tokens);
// user.tokens[] = {access, token};
this.tokens.push({acces, token});
// user.tokens = user.tokens.concat([{access, token}]);
return this.save().then(() => {
return token;
});
});
let User = mongoose.model('User', UserSchema);
module.exports = {User};
使用以下路由在服务器中调用generateAuthToken():
app.post('/users', (req, res) => {
let user = new User(_.pick(req.body, ['email', 'password']));
user.save().then((doc) => {
return user.generateAuthToken();
}).then((token) => {
res.header('x-auth', token).send(user);
}).catch((e) => {
res.status(400).send(e);
});
});
当我将该路由与有效数据一起使用时,返回400错误。用户对象已写入数据库中,但其标记数组为空。我在终端上没有任何错误,但是通过替换console.log()调用,我可以缩小this.tokens.push()调用的错误。从那里什么都不执行。
那么,有人可以帮助我追平错误吗?
使用节点10.9.0和:
"body-parser": "^1.18.3",
"express": "^4.16.3",
"jsonwebtoken": "^8.3.0",
"lodash": "^4.17.10",
"mongodb": "^3.1.4",
"mongoose": "^5.2.10",
"validator": "^10.7.1"
谢谢!
答案 0 :(得分:2)
将对象推入数组时,您正在使用简写json。但是,您在acces
上有错字:
this.tokens.push({acces, token});
应为:this.tokens.push({access, token});
(注意:acces
-> access
,带有两个s,而不是一个)