为什么我不能通过mysql查询在Express中发送响应?

时间:2016-02-01 17:14:39

标签: mysql node.js express

我会保持代码简单,但基本上,我有一个运行Express的Node.js服务器。 Express使用pooling(以及mysql npm包)连接到MySQL数据库。这就是我的服务器的样子(我省略了无聊的要求以及如何保持这一点)。这是服务器处理的唯一路由。

server.all('/test', function (req, res, next) {
    pool.getConnection(function (err, conn) {
        if (err) {
            console.log(err);
        }
        else {
            conn.query("select * from spwp_appusers where id=46", function (err, rows) {
                conn.release();

                if (err) {
                    console.log(err);
                }
                else {
                    res.send(200);
                }
            });
        }
    });

    next();
});

但是,当我运行此代码时,服务器会尝试执行res.send(200);但会中断并出现以下错误:

/usr/lib/node_modules/mysql/lib/protocol/Parser.js:77
        throw err; // Rethrow non-MySQL errors
        ^

Error: Can't set headers after they are sent.
    at ServerResponse.OutgoingMessage.setHeader (_http_outgoing.js:335:11)

有谁知道发生了什么?为什么我不能发送回复?即使我使用回调,我也会收到此错误。

2 个答案:

答案 0 :(得分:3)

我认为问题出在下一步。尝试更改next();

内的getConnection()

答案 1 :(得分:0)

上面的错误显示在我的情况下我的mysql用户,密码,db名称不匹配所以请检查你的mysql凭证。

var pool = mysql.createPool({     主持人:'localhost',     用户:'root',     密码:'',     database:'dbname',multipleStatements:true });