2013-08-31 5 views
8

私はNodeフレームワークSails.jsの新しいコピーを解凍しました。私はis_ajax.jsと呼ばれるファイルを作成した同じconfigフォルダにSails.jsでカスタムルートミドルウェアを使用するには? (ExpressJS)

/** 
* (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 = { ... 

:それは、このコメントである/config/routes.jsファイルでエクスプレス3の上に構築されています。

// 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は私のCanJSアプリケーションが(そう、私のjavascriptのアプリケーションが正しくブックマーク-ことができます)URLに基​​づいてアプリケーションの状態を設定することができるように要求し、すべてが同じテンプレートファイルを読み込むGETすることです。

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

は、私は上記の操作を行う場合にのみ、それが明示モジュールを見つけることができないことを私に伝えます

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

のようなものです。私はexpressがSailsのnode_modules内のモジュールであることを確認しました。それをロードする別の構文はありますか?私はむしろ帆の上に明示的な2枚目のコピーをインストールする必要はありません。元のSails/Expressアプリケーションインスタンスにアクセスする方法はありますか?

答えて

17

これを実現するにはpoliciesを使用できます。 isAjax関数をisAjax.jsとしてapi/policiesフォルダに保存し、module.exports.isAjaxの代わりにmodule.exportsを使用するように変更します。そのファイル内の

'*':'isAjax' 

を:ちょうど行い、すべてのルートのisAjaxを実行する - その後、あなたのconfig/policies.jsファイルで、あなたはにポリシーを適用するためにどのコントローラ/アクションを指定することができます。

9

ミドルウェアの使い方を理解するのと同じ問題がありました。 基本的には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/フォルダ

+0

ThxをしてcustomMiddlewareを追加します。(+1)が、私はそれを書いているとは思わない - 震えの余分な矢のためのthx。 – Cody

4

内のすべてのそのような政策を置くことで、私はこのスレッドを見つけ、

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(); 
     }) 
    } 
    } 
+1

Sailsのカスタムミドルウェアを実行するだけで、Expressを依存関係として追加する必要はありません。あなたの例では、あなたのカスタム関数で他のExpressミドルウェアを利用していますが、これはうまくいきませんが、それをやっていないなら、ステップ1と2はスキップできます。 – sgress454

+0

"express:"は推奨されていません(帆0.12.1) 。 "http:"を使用してください – eyn

関連する問題