2016-08-28 13 views
2

私はNode.jsプログラミングを初めて使用しています。私は次のコードで同じエラーが発生し続けるので、大きな問題を抱えています。私はそこに何が問題なのか理解できません。非同期応答 - 送信後にヘッダーを設定できません

送信後にヘッダーを設定できません。

var mongoose = require('mongoose'); 

module.exports = function(req, res) { 
    var User = require('../../Schema/User'); 
    User.count({ $and: [{ "username": req.body.username }, { "password": req.body.password }] }, 
     function(err, count) { 
      console.log(count); 
      res.json(count); 
     }); 
}; 
+0

あなたのコードをさらに表示できますか?私は何が問題を引き起こしているか知っています。あなたがあなたのコードをさらに提供しない限り、あなたを助けることはできません。 –

+1

'var express = require( 'express'); '{../../ Models/User/loginUser '}(req、res())が必要です。 ); next(); }); 'module.exports = route; 'これはあなたが上に投稿したファイルであるコード –

+0

の上にどこから呼び出すのですか? –

答えて

0

あなたは、本質的にミドルウェアにログインスニペットを回して、それを下に渡し、あなたのルートのコードでnext()を呼んでいます。ログインコードでres.jsonと出力していて、次のステップをnextで呼び出しているため、このエラーが発生しています。 l。

あなたの問題は、すべての出力の前にヘッダーが来る必要があることです。ミドルウェアにデータを書き込んだり渡したりするかどうかは、その後のヘッダー/書き込みの可能性がある限り、あなた次第です。

しかし、一般的に、認証ミドルウェアはユーザーがログオンしているかどうかを確認するために使用されます。おそらくセッションCookieをチェックしています。ユーザーがOKであれば、Cookie情報(つまり_id)に基づいてユーザーデータを取得(必要な場合)したり、ユーザーをログインページにリダイレクトしたりできます。

ここには、実際にはミドルウェアを必要としないloginルートがあります。ユーザーが有効かどうかを確認し、セッションクッキーを設定するか、それとも不快であるかを伝えるだけです。

パスポートは物事を楽にします。このpostをチェックしてください。根底にある原則は、私が上で概説したものと同じです。

+1

はい私はちょうどログインミドルウェアとしてこれを使用しようとしています。それを行うための良い方法はありますか?私はまだ非同期関数から応答を送りたい。 –

+0

@ Yashuaありがとうございました。私の問題は解決しました:) –

+0

一般にミドルウェアからは出力されません。アイデアは何かをして最終的な機能に引き渡してから終了/出力することです。あなたのミドルウェア 'req.foo = 'bar'からのリクエストに物事を結びつけ、後続のコードでそれにアクセスすることができます。それははるかに管理しやすくなります。 – cyberwombat

関連する問題