Я новичок в 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"
Спасибо!