Routen-error: Fehler: nicht festlegen Können-Header, nachdem Sie gesendet werden
Gut, nachdem ich gelesen habe viele threads über dieses ich beginne zu stagnieren. Der Fehler ist das beliebte Error: Can't set headers after they are sent
.
Die beste Antwort ist hier aber, ich haben Sie keine sich wiederholenden Funktionen oder zweimal ausgeführt Rückrufe (zumindest nicht dass ich wüsste), es ist nur eine standard-base-rest-API.
Full-trace-Protokoll:
/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)
Sowieso, mein code ist einfach:
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
Hinweis: reqHelper ist meine eigene Funktion zu gehen, durch erf.body-Objekt, für die jetzt deaktiviert ist.
"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;
- Könntest du ein vollständiges Fehler-stack-trace ?
- Was endpoint fordern Sie, dass die Fehlermeldung erhält?
Error: Can't set headers after they are sent
der Regel bedeutet, Sie haben einen Fehler im control flow irgendwo. - bearbeitet! Hinzugefügt fulltrace.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie ich sehe, haben Sie Fehler in dieser Funktion
Und ich denke Cliente.create gibt ein err, so dass Sie benötigen, ändern Sie diese Funktion wie diese
Alle Ihre Routen nennen
res.json
zweimal.hat keine
return
oderelse
. Du meinst wohloder
Da, Sie nennen es doppelt, Sie beginnen senden Sie Ihre Daten, und dann den zweiten Anruf zu senden versucht die
application/json
header wieder, was nicht erlaubt ist.