【发布时间】:2016-01-20 22:01:11
【问题描述】:
在向数据库输入条目后,我试图向客户端返回响应。我已经编写了以下代码来实现所需的结果,但是我得到了
错误:发送后无法设置标头。
我不会在任何地方为该响应调用 response.json() 或 response.render() 两次。那么为什么会出现这个错误呢?
router.post('/yolo', jsonParser, function(req, res, next) {
response = res;
shortUrl = shortenTheUrl(req.body.textBoxValue);
var insertDataInTableQuery = "INSERT INTO `WinGoku`.`ShortenedUrlsTable` (`OriginalUrl`, `ShortUrl`) VALUES('"+req.body.textBoxValue+ "', '"+ shortUrl +"')";
runSQLQuery(insertDataInTableQuery, sendResponseToClient);
});
function runSQLQuery(query, callbackFunction) {
connection.query(query, function(error) {
if(error) {
console.log(query);
console.log("QueryError: "+ error);
if(callbackFunction != undefined)
callbackFunction({type: "alert", errorMessage: error});
}
if(callbackFunction != undefined)
callbackFunction({type: "alert", errorMessage: "successful"});
});
}
function sendResponseToClient(queryExecutionResult) {
console.log("1: "+ queryExecutionResult["type"] + " 2: "+ queryExecutionResult["errorMessage"]);
response.json({shortenedUrl: shortUrl, type: queryExecutionResult["type"], message: queryExecutionResult["errorMessage"]});
^
error here. Can't set headers after they are sent
}
【问题讨论】:
-
当
runSQLQuery发生错误时,回调会被调用两次。顺便说一句,您的代码似乎容易受到SQL injections 的影响。
标签: javascript jquery node.js express