从应用程序nodejs收到的响应不完整

时间:2019-03-19 06:53:32

标签: node.js nginx

我正在nginx服务器上使用nodejs。有时,节点应用程序崩溃并返回“从应用程序收到的不完整响应”。是什么导致此问题?

const Express = require('express');
const BodyParser = require('body-parser');
const Request = require('request');
const Conf = require('./conf');
const {db} = require('./lib/database');
const app = Express();

app.use(BodyParser.json());
app.use(BodyParser.urlencoded({extended: false}));

app.use((req, res, next) => {
    res.header('Access-Control-Allow-Origin', '*');
    res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept');
    res.header('Access-Control-Allow-Methods', 'POST');
    if ('OPTIONS' == req.method) {
        res.header('Access-Control-Allow-Methods', 'POST');
        return res.sendStatus(200);
    }
    next();
});

app.post('/getProperty', (req, res) => {
    const sql = "SELECT ('['||(st_asgeojson(geom)::json)||']')::json FROM spt.spt  where id=" + req.body.id;
    db.query(sql, (err, result) => {
        if (err) res.status(err.code).json({code: err.code, message: err.message}).end();
        (result.rows.length == 0) ? res.send([]) : res.send(result.rows[0].json);
    })
});

app.post('/getAnalysis', (req, res) => {
    const sql = "select value from test.test where id=" + req.body.id + " order by value asc";
    db.query(sql, (err, result) => {
        if (err) result.status(err.code).json({code: err.code, message: err.message}).end();
        res.send(result.rows);
    })
});

app.listen(3000);

1 个答案:

答案 0 :(得分:0)

如果发生错误,您的代码会尝试发送响应两次。您需要在向客户端发送错误响应后退出该函数,因此在您的 return 中使用 if 或在下面添加 else 以获取成功响应。 发送多个响应将在 express 中断开套接字。