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 });