2016-03-24 15 views
0

Node adlı kullanıcı yaşıyorum. Kafamı bu hatanın etrafına sarmaya çalışıyorum, nedenini anlamıyorum. Onunla birkaç yazı gördüm, ama hepsi farklı durumlar ve hiçbiri benimkilerle eşleşmiyor. Yardımını takdir et. Diğer yayınlarda gördüğüm kadarıyla Çoğu durumda bir gönderide, benimki bir get ve hataya geri dönüyorum.Node.js, 344 hatası, ayarlanmış olduktan sonra başlık ayarlanamaz

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... 

Bu yaklaşık

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

Daha fazla kod sağlayabilir misiniz? Bu parça –

+0

bu problem gibi görünmüyor daha yeni bir kod ekledim @ user1280859 –

+0

Ah şimdi görebiliyorum, belki de req.post.populate() 'i yapmaya çalışmış olabilir ve yine de res.json (req.post); 'dışında? –

cevap

0

GET posts/:post (son işleyiciniz) res.json(obj) satırlarından birini kaldırın. Buradaki nokta, iki kez yanıt vermenizdir: geri arama yürütmesinden bir önce ve DB erişiminden bir sonra. Onlardan sadece birini tut.

İlgili konular