2016-03-24 4 views
0

Ich bin neu bei Node. Ich versuche, meinen Kopf um diesen Fehler zu wickeln, den ich verstehe, ich verstehe nicht warum. Ich habe ein paar Posts gesehen, aber es sind alles verschiedene Fälle und keiner passt zu meinem. Also schätze Hilfe. Von dem, was ich in anderen Posts gesehen habe Es ist die meisten Fälle in einem Post, meins ist ein get und ich gebe res bei einem Fehler zurück.Node.js, Fehler 344, kann keine Kopfzeilen festlegen, nachdem sie festgelegt wurden

GET /posts/56f2a808653270ff11f7ddb2 304 30.391 ms - - 
_http_outgoing.js:344 
    throw new Error('Can\'t set headers after they are sent.'); 
    ^

Error: Can't set headers after they are sent. 
    at ServerResponse.OutgoingMessage.setHeader (_http_outgoing.js:344:11) 
    at ServerResponse.header (/Users/me/nodyhead/node_modules/express/lib/response.js:718:10) 
    at ServerResponse.json (/Users/me/nodyhead/node_modules/express/lib/response.js:246:10) 
    at /Users/me/nodyhead/routes/index.js:50:13 
    at next (/Users/me/nodyhead/node_modules/mongoose/lib/model.js:2491:5) 
    at EventEmitter.<anonymous> (/Users/me/nodyhead/node_modules/mongoose/lib/model.js:2621:5) 
    at EventEmitter.<anonymous> (/Users/me/nodyhead/node_modules/mpromise/lib/promise.js:180:45) 
    at emitThree (events.js:97:13) 
    at EventEmitter.emit (events.js:175:7) 
    at Promise.safeEmit (/Users/me/nodyhead/node_modules/mpromise/lib/promise.js:83:21) 
    at Promise.fulfill (/Users/me/nodyhead/node_modules/mpromise/lib/promise.js:104:24) 
    at Promise.resolve (/Users/me/nodyhead/node_modules/mongoose/lib/promise.js:142:23) 
    at next (/Users/me/nodyhead/node_modules/mongoose/lib/model.js:2687:15) 
    at /Users/me/nodyhead/node_modules/kareem/index.js:177:19 
    at /Users/me/nodyhead/node_modules/kareem/index.js:109:16 
    at nextTickCallbackWith0Args (node.js:420:9) [nodemon] app crashed - waiting for file changes before starting... 

Das ist meine drei Funktionen ist es beschwert sich über

router.get('/posts', function(req, res, next) { 
    Post.find(function(err, posts) { 
     if (err) { return next(err); } 

     res.json(posts); 
    }); 
}); 


router.param('post', function(req, res, next, id) { 
    var query = Post.findById(id); 

    query.exec(function(err, post) { 
     if (err) { return next(err); } 
     if (!post) { return next(new Error('can\'t find post')); } 

     req.post = post; 
     return next(); 
    }); 
}); 

router.get('/posts/:post', function(req, res) { 
    req.post.populate('comments', function(err, post) { 
     if (err) { return next(err); } 

     res.json(post); 
    }); 

    res.json(req.post); 
}); 
+0

Können Sie mehr Code bereitstellen? Es scheint nicht, dass dieses Problem in diesem Fragment –

+0

Ich habe gerade mehr Code hinzugefügt @ user1280859 –

+0

Ah jetzt sehe ich vielleicht, könnte es sein, dass es versucht zu 'req.post.populate()' und immer noch die 'res.json (req.post); 'außerhalb? –

Antwort

0

Bei Ihrer GET posts/:post (Ihr letzter Handler) entfernen Sie eine der res.json(obj) Linien. Der Punkt hier ist, dass Sie zweimal reagieren: eine vor der Callback-Ausführung und eine nach dem DB-Zugriff. Behalte nur einen von ihnen.

Verwandte Themen