【发布时间】:2016-01-26 07:27:48
【问题描述】:
我正在尝试发送回复,但我不确定该怎么做。当我尝试运行“res.send 或 res.response”此代码时,我收到此错误 Can't set headers after they are sent。
我创建路由的方式是,如果输入了 /id,那么我将执行 SQL 查询来检查 TableA 中是否存在该 id。如果 id 存在,那么我将得到该项目,例如。 food,在对应于该 id 的 table_type 列中。然后我将转到名为 table 的 table_type 项目,例如。食物,我将从该表中获取属性并发送响应或呈现页面。
// parameter middleware that will run before the next routes
app.param('num', function(req, res, next, num) {
var array = [];
var id;
var table;
client.connect(function(err) {
if(err) {
return console.error('could not connect to postgres', err);
}
client.query("SELECT id, table_type FROM TableA WHERE id=" + num, function(err, result1) {
if(err) {
return console.error('error running query', err);
}
else {
//console.log("###### THIS IS IT!!! #######");
//console.log(result1);
id = result1.rows[0].id;
table = result1.rows[0].table_type.trim();
var latitude;
var longitude;
if (table === "Food") {
var name;
var description;
client.query("SELECT name, description, quantity, color FROM FoodTable WHERE item_id=" + id, function(err, result2) {
if(err) {
return console.error('error running query', err);
}
else {
name = result2.rows[0].name.trim();
description = result2.rows[0].description.trim();
quantity = result2.rows[0].quantity.trim();
color = result2.rows[0].color.trim();
array.push(name, description, quantity, color);
console.log(array);
//---- WHY NO WORK? ------
res.send(array);
}
client.end();
});
}
}
client.end();
});
});
next();
});
代码的文字解释:
我正在尝试编写路由,通过调用 SQL 查询client.query,使用 app.param 检查 id 是否存在于 TableA 中。我不能在函数外部使用变量,因为一旦函数调用完成,数据将不会被引用。所以我已经连接了我的查询。因此,一旦 ID 存在于 TableA 中,我将 id 和 table_type 存储到变量中并检查 if 语句中的类型。因此,如果表类型是 Drinks,那么我会查看 Drinks 表以获取与 id 关联的属性。
【问题讨论】:
标签: javascript sql node.js postgresql express