gpt4 book ai didi

javascript - 路由错误 : Error: Can't set headers after they are sent

转载 作者:搜寻专家 更新时间:2023-11-01 00:11:49 25 4
gpt4 key购买 nike

好吧,在我读了很多关于这个的帖子后,我开始停滞不前了。该错误是常见的错误:发送后无法设置 header

最佳答案是here但是,我没有重复的函数或两次执行的回调(至少我不知道),它只是一个标准的基础 rest API。

完整的跟踪日志:

/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)

无论如何,我的代码很简单:

index.js:

"use strict";

var express = require('express'),
router = express.Router();

var clientes = require('./clientes');
var items = require('./items');

router.route('/clientes')
.post(clientes.crear)
.put(clientes.actualizar)
.delete(clientes.borrar);

router.route('./items')
.post(items.crear)
.put(items.actualizar)
.delete(items.borrar);

module.exports = router;

clientes.js

注意: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' });

没有returnelse。你可能是说

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

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

由于您调用了两次,因此您开始发送数据,然后第二次调用尝试再次发送 application/json header ,这是不允许的。

关于javascript - 路由错误 : Error: Can't set headers after they are sent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27512846/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com