【发布时间】:2016-08-30 04:34:32
【问题描述】:
我有一个简单的基于节点的 API,它需要解析一些 JSON,将一些数据保存到 Postgres,然后发送适当的响应代码(如 http 201)。 我的代码如下所示:
router.route('/customer')
.post(function(req, res) {
Customers = req.body;
var numberOfCustomers = Customers.length;
for(var i = 0; i < Customers.length; i++){
Customer = Customers[i];
console.log(Customer.Name + " " + Customer.Address);
var date = moment(new Date()).unix();
client.query(
'INSERT into customer (name, address, date_modified) VALUES($1, $2, $3) RETURNING id',
[Customer.Name, Customer.Address, date],
function(err, result) {
if (err) {
console.log(err);
status = 1;
} else {
console.log('row inserted with id: ' + result.rows[0].id);
if(numberOfCustomers === i) {
res.status(201).send({ message: "created" });
}
}
});
}
})
我收到此错误:
_
http_outgoing.js:344
throw new Error('Can\'t set headers after they are sent.');
^
Error: Can't set headers after they are sent.
at ServerResponse.OutgoingMessage.setHeader (_http_outgoing.js:344:11)
我需要考虑这样一个事实,即我在一个循环中多次执行 Postgres 插入,所以在第一次插入完成后我无法发送响应标头。
我的“POST”处理程序中最适合放置我的res.status(201).send({ message: "created" }); 的位置是什么?
?
【问题讨论】:
-
最合适的位置是您希望向请求发送单个响应的位置。这完全取决于您的要求。
标签: javascript sql node.js postgresql