【发布时间】:2019-02-23 23:57:56
【问题描述】:
我正在尝试学习 nodejs 并使用 jwt 为用户创建令牌。但我在服务器端收到此错误:secretOrPrivateKey must have a value。这是很多代码,所以我将给出我认为重要的内容(如果您需要其他内容,请告诉我):
user.js:
const config = require('./../config/config').get(process.env.NODE_ENV);
...
userSchema.methods.generateToken = function(callback) {
console.log(config.SECRET); // THIS IS UNDEFINED
var token = jwt.sign(this._id.toHexString(), config.SECRET);
this.token = token;
this.save(function(err, user) {
if (err) return callback(err);
callback(null, user)
});
}
server.js:
app.post('/api/login', (req, res) => {
User.findOne({'email': req.body.email}, (err, user) => {
...
user.generateToken((err, user) => {
if (err) return res.status(400).send(err);
res.cookie('auth', user.token).json({
isAuth: true,
id: user._id
})
})
})
})
config.js:
const config = {
production: {
SECRET: process.env.SECRET,
DATABASE: process.env.MONGODB_URI
},
default: {
SECRET: 'SUPER_SECRET-PASSWORD!123?',
DATABASE: 'mongodb://localhost:27017/feedback'
}
}
exports.get = function get(env) {
return config[env] || config.default
}
【问题讨论】:
-
你使用的node命令是什么?如果您使用 node server.js 它是否返回默认值。你可以在你的exports.get()中放一个console.log
-
哦!您介意将您的评论放在官方答案中,以便我可以将其标记为答案。我使用的是 nodemon server.js,但是当我现在尝试使用 node server.js 时,我的服务开始工作了。请您介意解释一下为什么会这样以及如何使用 nodemon 使其工作:) 我对此很陌生