9

Node フレームワーク Sails.js の新しいコピーを解凍しました。Express 3 上に構築されています。 /config/routes.js ファイルには次のコメントがあります。

/**
 * (1) Core middleware
 *
 * Middleware included with `app.use` is run first, before the router
 */


/**
 * (2) Static routes
 *
 * This object routes static URLs to handler functions--
 * In most cases, these functions are actions inside of your controllers.
 * For convenience, you can also connect routes directly to views or external URLs.
 *
 */

module.exports.routes = { ...

同じ構成フォルダーに、is_ajax.js というファイルを作成しました。

// Only run through API on ajax calls.
module.exports.isAjax = function(req, res, next){
  if (req.headers['x-requested-with']) {
    // Allow sails to process routing
    return next();
  } else {
    // Load main template file
    // ...
  }
};

私の意図した目的は、非 Ajax GET リクエストがすべて同じテンプレート ファイルをロードするようにして、CanJS アプリケーションが URL に基づいてアプリケーションの状態を設定できるようにすることです (したがって、私の JavaScript アプリケーションは適切にブックマーク可能です)。

そのスクリプトをミドルウェアとして実行したいと思います。 この場合、他のルーティングの前に is_ajax.js スクリプトを実行するために app.use() を使用する方法を教えてください。

のようなものだと思います

var express = require('express');
var app = express();
app.use( require('./is_ajax') );

上記を実行した場合にのみ、exp​​ressモジュールが見つからないことがわかります。Express が Sails の node_modules 内のモジュールであることを確認しました。それをロードするための別の構文はありますか? 帆の横にエクスプレスの 2 番目のコピーをインストールする必要はありません。元の Sails/Express アプリ インスタンスにアクセスする方法はありますか?

4

3 に答える 3

19

ポリシーを使用してこれを実現できます。isAjax関数を isAjax.js として api/policies フォルダーに保存し、代わりに使用するように変更しmodule.exportsますmodule.exports.isAjax。次に、config/policies.js ファイルで、ポリシーを適用するコントローラー/アクションを指定できます。isAjaxすべてのルートに対して実行するには、次のようにします。

'*':'isAjax'

そのファイルで。

于 2013-09-01T20:13:19.200 に答える
10

ミドルウェアの使用方法を理解するという同じ問題がありました。それらは基本的に で定義されていconfig/policies.jsます。
したがって、古いスタイルのミドルウェア(別名ポリシー) を使用する場合は、次のようにします (これは最善の方法ではない可能性があります)。

// config/policies.js
'*': [ 
  express.logger(),
  function(req, res, next) {
    // do whatever you want to
    // and then call next()
    next();
  }
]

ただし、sailjsの実際の方法は、そのようなすべてのポリシーをapi/policies/フォルダーに入れることです。

于 2013-09-14T17:40:49.507 に答える
4

Express の圧縮ミドルウェアを追加するには、このスレッドを見つけて、

Sails-middleware-example-issueは非常に便利です。

  1. エクスプレス ローカルをインストールします。npm install express
  2. ロード エクスプレス:var exp = require('express')
  3. カスタムミドルウェアを追加$app_dir/config/local.js
express: {
    customMiddleware: function (app) {
      console.log("config of Middleware is called");
      app.use(exp.logger());
      app.use(exp.compress());
      app.use(function (req, res, next) {
        console.log("installed customMiddleware is used");
        next();
      })
    }
  }
于 2013-11-28T13:41:40.203 に答える