1

以下のデモ プロジェクトはこちら、ブログ投稿はこちらです。

彼は、Angularjs のテンプレートとルーティングを使用する代わりに、jade engine私が使用する whichを使用しています。don't want

ルートフォルダは

client > js (contain all js files)
       > views > partials > html files
       > index.html

彼のコードを変更した後、私は以下のコードで立ち往生しています

適切な応答を送信できません。

res.render('index.html', {layout : null});ページを更新するときにエラーが発生するよりも使用すると

エラー :

Error: Cannot find module 'html'
    at Function.Module._resolveFilename (module.js:338:15)
    at Function.Module._load (module.js:280:25)
    at Module.require (module.js:364:17)
    at require (module.js:380:17)

ページを更新するよりも使用するとres.redirect('/')、app.js で定義されたルート (/) が常に送信されます。

Needed :レスポンスを送りたい、ブラウザを更新しても同じページにいられないようにしたい。

{
        path: '/*',
        httpMethod: 'GET',
        middleware: [function(req, res) {
           var role = userRoles.public, username = '';
        if(req.user) {
            role = req.user.role;
            username = req.user.username;
        }
        res.cookie('user', JSON.stringify({
            'username': username,
            'role': role
        }));
            //res.render('index.html', {layout : null});
            //res.redirect('/');

        }],
        accessLevel: accessLevels.public
    }
4

1 に答える 1

2

バックエンド テンプレート言語 (jade など) を使用していない場合は、 res.render の代わりに res.sendfile を使用ます。Render は、ファイルの拡張子 (.jade など) に一致するテンプレート エンジンを探し、それを介してファイルを実行します。この場合、html と呼ばれるレンダリング エンジンが存在する必要があると想定していますが、存在しません。SendFile は、適切なヘッダーを付けてファイルをそのまま転送するだけです。

編集:

あなたが何を求めているのかはまだ100%わかりませんが、あなたが言っているのは、ログインしていない場合はワイルドカードルートで人々をホームページにリダイレクトしたいということだと思いますが、ログインしている場合は、他のルートが引き継がれます。

/*その場合は、ルートの「ミドルウェア」機能にチェックを入れるだけです。

それ以外の:

function(req, res) {
    res.redirect('/');
}

ある種の条件付きロジックを使用します。

function (req, res, next) {
    if (/* !req.cookie.something or whatever */)
        res.redirect('/');
    else
        next(); // continue on to the next applicable (matching) route handler
}

そうすれば、常にリダイレクト ループに陥るわけではありません。明らかに、上記の条件付きロジックは、必要に応じて非同期にすることができます。

res.sendfilegithubメンバーも提案したように、あなたの質問の他の部分に対する正しい答えだと今でも信じています。

于 2013-06-08T02:58:32.140 に答える