【问题标题】:Why can't I send a response in Express from a mysql query?为什么我不能通过 mysql 查询以 Ex​​press 形式发送响应?
【发布时间】:2016-12-14 23:56:08
【问题描述】:

我将保持代码简单,但基本上,我有一个运行 Express 的 Node.js 服务器。 Express 使用池(和 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)

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

【问题讨论】:

    标签: mysql node.js express


    【解决方案1】:

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

    【讨论】:

    • 呸哈哈。那是一个大脑放屁。 next()res.send() 之前执行。
    【解决方案2】:

    以上错误显示在我的情况下与我的 mysql 用户、密码、数据库名称不匹配,因此请检查您的 mysql 凭据。

    var pool = mysql.createPool({ 主机:'本地主机', 用户:'根', 密码: '', 数据库:'dbname',多个语句:true });

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-03
      • 1970-01-01
      • 1970-01-01
      • 2018-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多