Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 路由错误:错误:Can';t在发送邮件后设置邮件头_Javascript_Node.js_Express - Fatal编程技术网

Javascript 路由错误:错误:Can';t在发送邮件后设置邮件头

Javascript 路由错误:错误:Can';t在发送邮件后设置邮件头,javascript,node.js,express,Javascript,Node.js,Express,嗯,在我读了很多关于这方面的文章之后,我开始停滞不前。该错误是常见的错误:发送头后无法设置头 最好的答案是,我没有重复的函数或两次执行的回调(至少我不知道),它只是一个标准的基本RESTAPI 完整跟踪日志: /home/nano/Dev/JS/OMI/node_modules/mongoose/lib/utils.js:413 throw err; ^ Error: Can't set headers after they are sent.

嗯,在我读了很多关于这方面的文章之后,我开始停滞不前。该错误是常见的
错误:发送头后无法设置头

最好的答案是,我没有重复的函数或两次执行的回调(至少我不知道),它只是一个标准的基本RESTAPI

完整跟踪日志:

/home/nano/Dev/JS/OMI/node_modules/mongoose/lib/utils.js:413
        throw err;
              ^
Error: Can't set headers after they are sent.
    at ServerResponse.OutgoingMessage.setHeader (http.js:689:11)
    at ServerResponse.header (/home/nano/Dev/JS/OMI/node_modules/express/lib/response.js:666:10)
    at ServerResponse.send (/home/nano/Dev/JS/OMI/node_modules/express/lib/response.js:146:12)
    at ServerResponse.json (/home/nano/Dev/JS/OMI/node_modules/express/lib/response.js:235:15)
    at Promise.<anonymous> (/home/nano/Dev/JS/OMI/app/routes/clientes.js:19:11)
    at Promise.<anonymous> (/home/nano/Dev/JS/OMI/node_modules/mongoose/node_modules/mpromise/lib/promise.js:172:8)
    at Promise.emit (events.js:95:17)
    at Promise.emit (/home/nano/Dev/JS/OMI/node_modules/mongoose/node_modules/mpromise/lib/promise.js:84:38)
    at Promise.reject (/home/nano/Dev/JS/OMI/node_modules/mongoose/node_modules/mpromise/lib/promise.js:111:15)
    at Promise.error (/home/nano/Dev/JS/OMI/node_modules/mongoose/lib/promise.js:95:15)
clients.js

"use strict";

var Item = require('../models/models').Item;
// var reqHelper = require('./util');

var items = {
  crear: function(req, res) {
    var nuevoItem = {
      _id: req.body._id,
      descripcion: req.body.descripcion,
      costo: req.body.costo,
      precioMin: req.body.precioMin,
      precioMax: req.body.precioMax,
      existencia: req.body.existencia,
      disponible:req.body.disponible
    };

    Item.create(nuevoItem, function(err, item) {
      if (err) res.json({status: 500, error: err});
      res.json({ status: 200, item: item });
    });
  }, // fin crear

  actualizar: function(req, res) {
    var itemData = {};
    var itemId = req.body._id;  

    // reqHelper(req.body, itemData);

    Item.update({_id: itemId}, itemData, function(err, item) {
      if(err) res.json({status: 500, error: err});
      res.json({status: 200, token: item});
    }); // fin Item.update
  }, // fin actualizar

  borrar: function(req, res) {
    Item.remove({_id: req.body._id}, function(err){
      if(err) res.json({status: 500, error: err});
      res.json({ status: 200, msg: 'Item removido' });
    });
  }, // fin borrar
}; // fin items

module.exports = items;
注意:reqHelper是我自己的函数,用于遍历req.body对象,目前已禁用

"use strict";

// instancias de modelos
var Cliente = require('../models/models').Cliente;
// var reqHelper = require('./util');

var clientes = {

  crear: function (req, res) {
    var nuevoCliente = {
      _id: req.body._id,
      nombre: req.body.nombre,
      direccion: req.body.direccion,
      telefono: req.body.telefono
    };

    Cliente.create(nuevoCliente, function (err, cliente) {
      if (err) res.json({status: 500, error: err});
      res.json({ status: 500, cliente: cliente });
    }); // fin Cliente.create
  }, // fin crearCliente

  actualizar: function(req, res) {
    var ci = req.body._id;

    var clienteData = {};
    // reqHelper(req.body, clienteData);

    Cliente.update({ _id: ci }, clienteData, function(err, cliente) {
      if (err) res.json({status: 500, error: err});
      res.json({ status: 200, cliente: cliente });
    }); // fin Cliente.update
  }, //fin actualizarCliente

  borrar: function(req, res) {
    Cliente.remove({ _id: req.body._id }, function(err) {
      if (err) res.json({status: 500, error: err});
      res.json({ status: 200, msg: 'Cliente borrado' });
    });
  }, // fin borrarCliente
}; // fin actions

module.exports = clientes;
items.js

"use strict";

var Item = require('../models/models').Item;
// var reqHelper = require('./util');

var items = {
  crear: function(req, res) {
    var nuevoItem = {
      _id: req.body._id,
      descripcion: req.body.descripcion,
      costo: req.body.costo,
      precioMin: req.body.precioMin,
      precioMax: req.body.precioMax,
      existencia: req.body.existencia,
      disponible:req.body.disponible
    };

    Item.create(nuevoItem, function(err, item) {
      if (err) res.json({status: 500, error: err});
      res.json({ status: 200, item: item });
    });
  }, // fin crear

  actualizar: function(req, res) {
    var itemData = {};
    var itemId = req.body._id;  

    // reqHelper(req.body, itemData);

    Item.update({_id: itemId}, itemData, function(err, item) {
      if(err) res.json({status: 500, error: err});
      res.json({status: 200, token: item});
    }); // fin Item.update
  }, // fin actualizar

  borrar: function(req, res) {
    Item.remove({_id: req.body._id}, function(err){
      if(err) res.json({status: 500, error: err});
      res.json({ status: 200, msg: 'Item removido' });
    });
  }, // fin borrar
}; // fin items

module.exports = items;

所有路由都会调用
res.json
两次

if (err) res.json({status: 500, error: err});
res.json({ status: 200, msg: 'Cliente borrado' });
没有
返回
其他
。你可能是说

if (err) res.json({status: 500, error: err});
else res.json({ status: 200, msg: 'Cliente borrado' });


因为您要调用它两次,所以您开始发送数据,然后第二次调用尝试再次发送
应用程序/json
头,这是不允许的。

因为我看到此函数中有错误

  crear: function (req, res) {
    var nuevoCliente = {
      _id: req.body._id,
      nombre: req.body.nombre,
      direccion: req.body.direccion,
      telefono: req.body.telefono
    };

    Cliente.create(nuevoCliente, function (err, cliente) {
      if (err) res.json({status: 500, error: err});
      res.json({ status: 500, cliente: cliente });
    }); // fin Cliente.create
  }, // fin crearCliente
我认为Cliente.create返回错误,所以您需要像这样更改此函数

      if (err) {
        return res.json({status: 500, error: err});
      }
      res.json({ status: 500, cliente: cliente });

您可以添加完整的错误堆栈跟踪吗?您正在调用哪个端点来产生错误<代码>错误:发送标题后无法设置标题通常意味着您的控制流中某处有错误。@Alexander!添加了完整跟踪。但是如果(err)只是在触发错误时才执行,否?我是这口井里的一个傻瓜,返回有效,现在跟踪消失了,但是,错误仍然存在。。。响应给我一个:{“status”:500,“error”:{},服务器记录器给我发送一个200ok:POST/omi/v1/clientes 20018.607ms-25。未创建任何文档或集合。
      if (err) {
        return res.json({status: 500, error: err});
      }
      res.json({ status: 500, cliente: cliente });