6

Web サイト内の場所に関係なく、ページの読み込みごとに呼び出されるグローバル関数を設定しようとしています。ExpressのAPIに従って、私は使用しました

app.all("*", doSomething);

ページが読み込まれるたびに関数 doSomething を呼び出しますが、完全には機能しません。この関数は、ベース ドメインのページ ロードを除いて、すべてのページ ロードで起動します (たとえば、 http ://domain.com/pageAは関数を呼び出しますが、http ://domain.com は呼び出しません)。私が間違っていることを誰かが知っていますか?

ありがとう!

4

5 に答える 5

8

私はあなたが置いたことに違いない

app.get('/', fn)

その上

app.all("*", doSomething);

Express は、何かが応答を送信するまで、登録された順序でミドルウェア関数を実行することに注意してください。

于 2013-10-10T21:41:57.073 に答える
1

app.all('*') はチェーンのどこにありますか? 他のすべてのルートの後である場合は、呼び出されない可能性があります。

app.post("/something",function(req,res,next){ ...dothings.... res.send(200); });

app.all('*',function(req,res) { ...this NEVER gets called. No next and res already sent });

最後にすることがあなたの意図でない限り、その場合は先行するルートで必ず next() を呼び出す必要があります。例えば:

app.post("/something",function(req,res,next){ ...dothings.... next();});

app.all('*',function(req,res) { ...this gets called });

また、doSomething には何が含まれていますか? 本当に呼び出されていませんか?

于 2013-10-10T23:57:40.800 に答える
1

リクエストごとに何らかのコードを実行したい場合は、ルーターを使用する必要はありません。

ルーターの上にミドルウェアを配置するだけで、リクエストごとに呼び出されます。

app.use(function(req, res, next){
  //whatever you put here will be executed
  //on each request

  next();  // BE SURE TO CALL next() !!
});

お役に立てれば

于 2013-10-10T23:52:00.897 に答える
0

私もこの問題を抱えており、doSomething関数の引数の数が要因である可能性があることを発見しました。

function doSomething(req, res, next) {
    console.log('this will work');
}

一方:

function doSomething(req, res, next, myOwnArgument) {
    console.log('this will never work');
}
于 2015-07-09T07:22:30.807 に答える