Heroku h12超时错误PG / Node.js

我试图插入到我的数据库时,得到一个讨厌的h12(超时错误)。

2017-01-25T00:22:24.764591+00:00 heroku[router]: at=error code=H12 desc="Request timeout" method=POST path="/api" host=kujaflow.herokuapp.com request_id=fb69dfdf-12ef-4dc8-8feb-45bef0c26746 fwd="71.125.214.77" dyno=web.1 connect=0ms service=30005ms status=503 bytes=0 

我不知道为什么会这样。 我的节点代码看起来不错,从我收集。 我编辑了用户/传递信息….

 var express = require('express'); var pg = require('pg'); var dbuser = 'xxxxxxxxx'; var dbpassword = 'xxxxxxxxx'; var dbname = 'xxxxxxxxx'; var dbhost = 'xxxxxxxxx'; var dbport = 5432; var dbconnect = { user: dbuser, password: dbpassword, host: dbhost, database: dbname, port: dbport }; var router = express.Router(); /* GET home page. */ router.get('/', function(req, res, next) { res.render('index', { title: 'Express' }); }); /* api */ router.post('/api', function(req, res, next) { var latitude = req.body.location.coords.latitude; // console.log("latitude: " + latitude); var longitude = req.body.location.coords.longitude; var heading = req.body.location.coords.heading; var timestamp = req.body.location.timestamp; var uuid = req.body.location.uuid; var is_moving = req.body.location.is_moving; pg.connect(dbconnect, function(err, client, done) { client.query('INSERT INTO kujadata (latitude, longitude) VALUES ($1, $2);',[latitude, longitude], function (err, result) { client.end(); }); }); }); router.get('/api', function(req, res, next) { res.render('index', { title: 'API' }); }); module.exports = router; 

任何想法将不胜感激。

是的,这里的问题是你没有正确地“结束”你的/api路线。 当你使用快递时,你需要明确地向客户发送一个响应。

以下是如何重写它的方法:

 router.post('/api', function(req, res, next) { var latitude = req.body.location.coords.latitude; var longitude = req.body.location.coords.longitude; var heading = req.body.location.coords.heading; var timestamp = req.body.location.timestamp; var uuid = req.body.location.uuid; var is_moving = req.body.location.is_moving; pg.connect(dbconnect, function(err, client, done) { client.query('INSERT INTO kujadata (latitude, longitude) VALUES ($1, $2);', [latitude, longitude], function (err, result) { client.end(); return res.end(); }); }); }); 

注意res.end()的显式调用? 这是告诉快递“嘿,请求完成,告诉客户我们通过!”

Heroku日志显示30秒超时的原因是因为您的请求从未“结束”,如果您的请求在30秒内未完成,Heroku将自动返回503。