2016-03-24 23 views
0

私はノードを使いました。このエラーの周りに私の頭をラップしようとすると、私はなぜ、私は理解していない。私はそれといくつかのポストを見たが、彼らはすべて異なるケースであり、まったく一致しない。だから助けを感謝します。私が他の投稿で見たものから投稿ではほとんどの場合、私のものは手に入れたもので、エラー時には返信します。Node.js、エラー344は、設定された後にヘッダーを設定できません。

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

これはまあ、問題はあなたが二回()res.jsonを呼び出すことである程度

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

もっとコードを提供できますか?そのフラグメントの問題ではないようです。 –

+0

もっと多くのコードを追加しました@ user1280859 –

+0

ああ、おそらくそれは 'req.post.populate()'しようとしていて、 'res.json (req.post); 'それは外ですか? –

答えて

0

GET posts/:post(最後のハンドラ)でres.json(obj)のいずれかの行を削除してください。ここでのポイントは、コールバック実行前とDBアクセス後の2回の応答です。それらのうちの1つだけを保つ。

関連する問題