process.nextTick(функция () { выбросить ошибку; }); Ошибка: не удается установить заголовки после их отправки

#javascript #node.js #mongodb #express

#javascript #node.js #mongodb #выразить

Вопрос:

Я пытаюсь получить данные из MongoDB в Node.js досье.
Я получаю эту ошибку:

/home/jay/node_project/user_data_manag/node_modules/mongodb/lib/utils.js:98
process.nextTick(функция () { выбросить ошибку; });

Ошибка: не удается установить заголовки после их отправки.
при ответе сервера.OutgoingMessage.setHeader (_http_outgoing.js:335:11)
в ServerResponse.header (/home/jay/node_project/user_data_manag/node_modules/express/lib/response.js:719:10)
в ServerResponse.json (/home/jay/node_project/ user_data_manag/node_modules/экспресс/библиотека/response.js:247:10)
при ответе сервера.отправить (/home/jay/node_project/user_data_manag/node_modules/express/lib/response.js:152:21)
в /home/jay/node_project/user_data_manag/routes/api.js:42:13
в /home/jay/node_project/user_data_manag/node_modules/ mongodb/библиотека /cursor.js:777:7
при обратном вызове (/home/jay/node_project/user_data_manag/node_modules/mongodb/lib/utils.js:96:12)
в /home/jay/node_project/user_data_manag/node_modules/mongodb/lib/cursor.js: 741:16
при обратном вызове handleCallback (/home/jay/node_project/user_data_manag/node_modules/mongodb/lib/utils.js:96:12)
в /home/jay/node_project/user_data_manag/node_modules/mongodb/lib/cursor.js:675:5

 // Dependencies
var express = require('express');
var router = express.Router();
var mongo = require('mongodb').MongoClient;
var objectId = require('mongodb').ObjectID;
var assert = require('assert');

var url = 'mongodb://localhost/rest_test';


router.post('/user', function(req, res, next) {
  if (req.body.name == "Login") {
    var result = [];
    mongo.connect(url, function(err, db) {
      var data = db.collection('products').find();
      data.forEach(function(doc, err) {
        result.push(doc);
      }, function() {
        db.close();
        res.send({
          iteamd: result
        });
      });
    });
  } else {
    res.send("data");
  }
  res.end();
});

//insert data
router.post('/put-data', function(req, res, next) {

  var item = {
    title: req.body.name,
    content: req.body.sku,
    author: req.body.price
  };
  var data = req.body.name;

  mongo.connect(url, function(err, db) {
    var cursor = db.collection('products').find({
      "name": data
    });
    res.send(cursor.toString);
  });

});


// Return router
module.exports = router;
  

Ответ №1:

Не вызывайте res.send() и res.end() в том же обработчике запроса.

res.send() вызовет res.end() вас (источник). res.end() обычно используется после вызова нескольких res.write() .

Комментарии:

1. Спасибо за совет, идеальное решение моего запроса

Ответ №2:

Если /user POST вызывается несколько раз, и СООБЩЕНИЕ n не закрывает соединение с db.close(); перед сообщением n 1 вы можете получить ту же ошибку.

Просто решаемая в моем скрипте.