Ich bin kürzlich in einem Nodejs-Projekt eingebunden worden und beim Versuch, Versprechen zwischen meinen Datenbankzugriffe und mein Routing zu verwenden, habe ich den Fehler gefunden Kann Header nicht festlegen nachdem sie gesendet werden bei der Frage nach einer Antwort bei http://localhost:8080/api/user. Obwohl ich so für mich hier bewusst viele Lösungen auf Stapel keine ausgearbeitet bin, ist mein Routing-Code bei router.jsNodeJS Unbehandelte Ablehnung Fehler: Kann Header nicht festlegen, nachdem sie gesendet werden
server.get('/api/user/', function (req, res) {
database.getUser()
.then(function(data){
res.send(data);
}, function(err){
res.send(500,{error: err});
});
});
und dem ersten Teil von database.js einschließlich der Funktion getUser
(function() {
'use strict';
var Promise = require('bluebird'),
mysql = require("mysql"),
bcrypt = require('bcryptjs'),
client;
exports.connect = function(){
return new Promise(function(resolve, reject) {
client = mysql.createPool({
connectionLimit : 100,
waitForConnection: true,
host : 'localhost',
user : 'root',
password : 'root',
database : 'public',
debug : false
});
if(!client){
reject('Deu merda');
}
else{
resolve();
}
});
}
exports.getUser = function(){
return new Promise(function (resolve, reject) {
var query = "SELECT name FROM public.users";
query = mysql.format(query);
client.query(query,function (err, result) {
if (err) {
reject(err);
} else {
resolve(result);
}
});
});
}
Jede Hilfe wäre großartig, danke im Voraus!
EDIT: Ich habe meinen Code erneut überprüft und ich habe eine Middleware, um zu überprüfen, ob ein Benutzer die Berechtigung hat, auf eine bestimmte Seite zuzugreifen, da es eine der letzten verbleibenden Optionen ist, wo ich etwas ändern könnte:
(function() {
'use strict';
var routes = require("./routes"),
cookie = require("./utils");
module.exports = function(req, res, next) {
var i;
if (req.url.split('/')[1] == 'api') {
// START REGION: API permissions (all)
for (i = 0; i < routes.api.all.length; i++) {
if (routes.api.all[i].indexOf(req.url) > -1) {
break;
}
}
if (i != routes.api.all.length) {
next();
} else {
// END REGION: API permissions (all)
// START REGION: API permissions (logged)
cookie.verifySession(req.cookies.session)
.then(function (userId) {
for (i = 0; i < routes.api.logged.length; i++) {
if (req.url.indexOf(routes.api.logged[i]) > -1) {
break;
}
}
if (i == routes.api.logged.length) {
return res.sendStatus(403);
} else {
next();
}
})
.catch(function (err) {
return res.sendStatus(403);
});
}
// END REGION: API permissions (logged)
} else {
// START REGION: Views permissions (all)
cookie.verifySession(req.cookies.session)
.catch(function (err) {
if (res.statusCode == null) {
return res.redirect('/forbidden');
}
});
for (i = 0; i < routes.views.all.length; i++) {
if (routes.views.all[i].indexOf(req.url) > -1) {
break;
}
}
if (i != routes.views.all.length) {
next();
} else {
// END REGION: Views permissions (all)
// START REGION: Views permissions (logged)
cookie.verifySession(req.cookies.session)
.then(function (userId) {
for (i = 0; i < routes.views.logged.length; i++) {
if (req.url.indexOf(routes.views.logged[i]) > -1) {
break;
}
}
if (i == routes.views.logged.length) {
if (res.statusCode == null) {
return res.redirect('/forbidden');
}
} else {
next();
}
});
}
// END REGION: Views permissions (logged)
}
next();
}
}());
ich habe eine Hilfsdatei, wo ich die permitions hinzufügen:
{
"api":{
"all": [
"/api/authenticate",
"/api/user"
],
"logged": [
"/api/lessons"
],
"admin": [
]
},
"views":{
"all": [
"/",
"/user_management"
],
"logged": [],
"admin": [],
"advanced": []
}
}
Irgendwo versuchen Sie, eine Kopfzeile zu ändern, nachdem Inhalt an den Browser gesendet wurde. Leider scheint es nicht im geposteten Code zu sein. – adeneo
Irgendwelche Ideen, wo ich nach dem Fehler suchen sollte? Ich habe ein bisschen von allem versucht, um ehrlich zu sein, aber ich kann nicht die Falle finden, in die ich gefallen bin. –
Es sieht für mich so aus, als könnte Ihre Middleware 'next()' mehr als einmal aufrufen. Vielleicht möchten Sie nach dem Aufruf von 'next()' zurückkehren, damit keiner dieser Pfade das letzte 'next()' am Ende Ihrer Funktion erreicht. – jfriend00