【发布时间】:2019-02-14 10:29:23
【问题描述】:
这太奇怪了。在本地主机上运行我的 Node.js 应用程序时,我一切正常。但是在部署到 Heroku 之后,它总是给我 400 Bad Request 和一个空白的响应正文 {} 。我使用相同的邮递员请求测试了两个环境,只更改了基本 URL。
这是我的发帖方法:
app.post('/users', (req, res) => {
var body = _.pick(req.body, ['email', 'password', 'f_name', 'l_name', 'phone', 'address']);
var user = new User(body);
user.save().then(() => {
return user.generateAuthToken();
}).then((token) => {
res.header('x-auth', token).send(user);
}).catch((err) => {
res.status(400).send(err);
});
});
最后,我发现每当我在发布新用户时尝试创建令牌时,我的 localhost 数据库确实可以工作,但在 Heroku 环境中没有创建令牌。
这意味着这个函数是最可疑的:
UserSchema.methods.generateAuthToken = function () {
var user = this;
var access = 'auth';
var token = jwt.sign({_id: user._id.toHexString(), access}, process.env.JWT_SECRET).toString();
user.tokens = user.tokens.concat([{access, token}]);
return user.save().then(() => {
return token;
}).catch((err) => {
return err;
});
};
我不明白的是,为什么这会对部署环境产生任何影响?我怎么知道 Heroku 内部出了什么问题?在本地运行时,我们通常会得到那些错误日志,heroku 日志没有任何好处。尽管我试图捕捉错误并返回它们,但我的邮递员响应正文没有返回任何内容。
感谢您的帮助!
【问题讨论】:
-
你应该在 Heroku 设置 JWT_SECRET。
标签: javascript node.js mongodb heroku jwt