Ich habe ein Problem mit meinem Express app (Node.js), wenn es um Heroku eingesetzt wird. Ich übergebe eine async/await-Funktion an meine Routen von einem Controller, es funktioniert lokal auf meinem Computer, aber es funktioniert nicht, wenn die App zu Heroku bereitgestellt wird.Async-Funktion nicht, wenn eingesetzt, um Heroku Arbeits
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'
})
}
}
}
Routen:
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'
})
}
})
}
Wenn die Asynchron-Funktion in der Route direkt ausgefuehrt wird, wie hier mit der Login-Route gesehen, es funktioniert auf Heroku though.
Der einzige Fehler, den ich bekommen, ist der Timeout-Fehler Heroku, da der Wunsch nach mehr als 30 Sekunden ansteht:
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
Jede Hilfe dankbar! :)
Protokollierung Hinzufügen, und diese Protokolle von Heroku holen wird eine so viel mehr auflösbar und vollständige Frage machen. – Amos47
Das Problem ist, dass ich die Anfrage für 30 Sekunden anhängig hat keine andere Fehler als die Heroku Timeout-Fehler erhalten, nachdem gewesen :( –
die Anfrage auf die Route bekommen hat? er alle richtigen Daten hat? hat er die Anforderung an das machen db? funktioniert es, wenn Sie einfach ein Versprechen verwenden? gibt es Buildfehler auf Heroku bereitstellen? – Amos47