42

Express で Node.js を使用しており、既に存在することを知っていresponse.redirect()ます。

forward()ただし、リダイレクトと同じパラメーターを使用するが、クライアントにリダイレクトを実行させるのではなく、リクエストを内部的に転送する Java に似た機能をさらに探しています。

明確にするために、私は別のサーバーへのプロキシを行っていません。forward('/other/path')同じアプリ インスタンス内で直接したい

明示的なドキュメントからこれを行う方法は明らかではありませんでした。何か助けはありますか?

4

7 に答える 7

13

Express 4+ の場合

次のハンドラーが正しい順序で追加されない場合、関数の使用はnext機能しません。を使用する代わりにnext、ルーターを使用してハンドラーを登録し、

app.get("/a/path", function(req, res){
    req.url = "/another/path";
    app.handle(req, res);
}

または、React/Angular の HTML5 モードの場合

const dir = process.env.DIR || './build';

// Configure http server
let app = express();
app.use('/', express.static(dir));

// This route sends a 404 when looking for a missing file (ie a URL with a dot in it)
app.all('/*\.*', function (req, res) {
    res.status(404).send('404 Not found');
});

// This route deals enables HTML5Mode by forwarding "missing" links to the index.html
app.all('/**', function (req, res) {
    req.url = 'index.html';
    app.handle(req, res);
});
于 2018-02-14T15:07:09.843 に答える
11

次のハンドラーが正しい順序で追加されない場合、関数の使用はnext機能しません。を使用する代わりにnext、ルーターを使用してハンドラーを登録し、

router.get("/a/path", function(req, res){
    req.url = "/another/path";
    router.handle(req, res);
}
于 2016-02-20T02:52:24.627 に答える
2
app.get('/menzi', function (req, res, next) {
        console.log('menzi2');
        req.url = '/menzi/html/menzi.html';
        // res.redirect('/menzi/html/menzi.html');
        next();
});

これは私のコードです: ユーザーが「/menzi」と入力すると、サーバーはページ /menzi/html/menzi.html をユーザーに提供しますが、ブラウザーの URL は変更されません。

于 2014-11-06T07:04:13.897 に答える