2017-12-29 23 views
-1

Hier sind meine Route Definitionen in Express.js:Wie verhindere ich, dass eine generische Route Header in einer bestimmten Route in Express.js einstellt?

// Building specific routes defined by a route file 
routes.use(this.initialize.bind(this)); 
routes.use(this.isAuthenticated.bind(this)); 
routes.use(this.isAuthorized.bind(this)); 
if (Route.METHOD == 'POST') { 
    routes.use(route.post.bind(route)); 
} else { 
    routes.use(route.get.bind(route)); 
} 
routes.use(this.finalize.bind(this)); 

router.use('/webstore/' + Route.RESOURCE + (parameters.length != 0 ? '/' : '') + parameters.join('/'), routes); 

//router.use('/webstore/session', routes); 

// Building generic routes 
console.log('Creating GET route: ' + 
      '/:connectionName(webstore|localdatastore)/:objectName'); 
router.get('/:connectionName(webstore|localdatastore)/:objectName', 
    this.initialize.bind(this), this.isAuthenticated.bind(this), this.isAuthorized.bind(this), this.get.bind(this), this.finalize.bind(this)); 
console.log('Creating POST route: ' + 
    '/:connectionName(webstore|localdatastore)/:objectName'); 
router.post('/:connectionName(webstore|localdatastore)/:objectName', 
    this.initialize.bind(this), this.isAuthenticated.bind(this), this.isAuthorized.bind(this), this.get.bind(this), this.finalize.bind(this)); 

Wenn ich versuche, generische Routen zuzugreifen, wie /webstore/user in den beiden Linien oben definiert, mein Code funktioniert gut, aber wenn ich versuche, eine zu verwenden, bestimmte Route oben von einer Route-Datei definiert, wie /webstore/session, erhalte ich diesen Fehler:

Error: Can't set headers after they are sent. 
    at ServerResponse.setHeader (_http_outgoing.js:371:11) 
    at ServerResponse.header (./node_modules/express/lib/response.js:767:10) 
    at ServerResponse.contentType (./node_modules/express/lib/response.js:595:15) 
    at Server.finalize (./dist/server.js:1156:17) 
    at Layer.handle [as handle_request] (./node_modules/express/lib/router/layer.js:95:5) 
    ... 

würde ich meine API Wohnung bleiben will, und muß nicht einen Aliasnamen hinzufügen, diesen Fehler zu entfernen. Wie verhindere ich, dass Express Header setzt, weil die generischen und definierten Routen kollidieren?

Antwort

1

Weil Sie versuchen, eine zweite Antwort zu senden, die nicht möglich ist. Überprüfen Sie die folgenden Zeilen und den Inhalt.

routes.use(this.finalize.bind(this)); 

router.use('/webstore/' + Route.RESOURCE + (parameters.length != 0 ? '/' : '') + parameters.join('/'), routes); 

Grundsätzlich, wenn Sie diese in einem gewissen Route:

res.send("..."); 

und Sie tun dies in einer anderen Middleware-Strecke

res.send("...."); 

Sie diesen Fehler erhalten.

Fügen Sie der finalize-Methode und allen 404/500-Fehlerhandlern den folgenden Code hinzu, um das erneute Senden von Headern zu verhindern. Der Code verarbeitet jedoch immer noch die gesamte Logik in beiden Zweigen, wenn Sitzungsmanipulation, Datenbankaufrufe usw. vorhanden sind.

+0

Entschuldigung für die verspätete Antwort. Sie haben mich auf die richtige Spur gebracht und ich habe das Problem bald danach gelöst, aber ich muss vergessen haben, es nach dem neuen Jahr zu aktualisieren. – NobleUplift

Verwandte Themen