gpt4 book ai didi

javascript - 部署到 Heroku 时异步功能不起作用

转载 作者:行者123 更新时间:2023-11-30 20:57:17 27 4
gpt4 key购买 nike

我的 Express 应用程序 (Node.js) 在部署到 Heroku 时出现问题。我正在将一个异步/等待函数从 Controller 传递到我的路由,它在我的机器上本地运行,但当应用程序部署到 Heroku 时它不起作用。

Controller :

  module.exports = {
async register (req, res) {
try {
const user = await User.findOne({
username: req.body.username
})

if (user) {
res.status(400).send({
error: 'error message'
})
} else {
const newUser = await new User({
username: req.body.username,
password: req.body.password
})
.save()

const userJson = newUser.toJSON()
res.send({
user: newUser,
token: jwtSignUser(userJson)
})
}
} catch (err) {
res.status(400).send({
error: 'error message'
})
}
}
}

路线:

  module.exports = (app) => {
app.post('/api/register',
AuthenticationController.register)

// This does work on Heroku, when async function is run in the route
app.post('/api/login', async (req, res) => {
try {
const user = await User.findOne({
username: req.body.username
})

if (!user) {
return res.status(403).send({
error: 'error message'
})
}

const userJson = user.toJSON()
res.send({
user: user,
token: jwtSignUser(userJson)
})
} catch (err) {
res.status(500).send({
error: 'error message'
})
}
})
}

如果异步函数直接在路由中运行,如此处的登录路由所示,它确实可以在 Heroku 上运行。

我得到的唯一错误是 Heroku 超时错误,因为请求等待超过 30 秒:

 2017-11-27T23:45:50.854011+00:00 heroku[router]: at=error code=H12 desc="Request timeout" method=POST path="/api/register" host=pba-bachelor2017.herokuapp.com request_id=485143e5-13b4-4c0e-a2c1-6c137dc6fbd0 fwd="192.38.10.202" dyno=web.1 connect=1ms service=30001ms status=503 bytes=0 protocol=https

感谢任何帮助! :)

最佳答案

Node.js 在 7.x.x 版本之后开始支持 ES7 async/await 语法。原因可能是您在 heroku 实例上的 Node 是 6.x.x 版本或更低版本,并且没有正确读取您的异步/等待代码。

您可以通过在 package.json 上指定 Node 版本来解决此问题。

{
"name": "your-heroku-app",
"version": "1.0.0",
...
"engines": {
"node": "7.10.0",
"npm": "4.2.0"
}
...
}

关于javascript - 部署到 Heroku 时异步功能不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47521542/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com