2013-06-23 8 views
5

NodeJSとExpressを学習しようとしています。私はnode-localstorageパッケージを使ってlocalstorageにアクセスしています。このヘルパー関数の登録Node.JS + Express

のような機能に直接ルート/ social.js

exports.index = function(req, res) 
{ 
    if (typeof localStorage === "undefined" || localStorage === null) 
    { 
     var LocalStorage = require('node-localstorage').LocalStorage; 
     localStorage = new LocalStorage('./scratch'); 
    } 

localStorage.setItem('myFirstKey', 'myFirstValue'); 
console.log(localStorage.getItem('myFirstKey')); 
res.render('social/index', {title: "Start"}); 
} 

しかし、私はすべて私の他に何度も何度もこのコードを記述する必要はありませんが、コードを使用するとき、これは動作しますローカルストレージにアクセスするときに機能します。

var localStorage = helpers.getLocalStorage 

などのようにアクセスできるヘルパー機能を登録できるようにしたいと考えています。

NodeJSでこれを行うにはどうすればよいですか?私はapp.localsについて何かを見たことがありますか?しかし、どのように私のルートのアプリオブジェクトにアクセスできますか?

答えて

13

ヘルパーメソッドをどのように/どこで使用する予定かによって、これを行う方法はたくさんあります。私は個人的には、私が必要とするすべてのヘルパーとユーティリティの方法で、utilsという独自のnode_modulesフォルダを設定することを好みます。

 
app.js 
db.js 
package.json 
views/ 
    index.ejs 
    ... 
routes/ 
    index.js 
    ... 
node_modules/ 
    express/ 
    ... 

は単純に含むindex.jsファイルで、node_modules下、utilsフォルダを追加します。次のプロジェクト構造を仮定たとえば

、その後

function getLocalStorage(firstValue){ 
    if (typeof localStorage === "undefined" || localStorage === null) 
    { 
     var LocalStorage = require('node-localstorage').LocalStorage; 
     localStorage = new LocalStorage('./scratch'); 
    } 
    localStorage.setItem('myFirstKey', 'myFirstValue'); 
    return localStorage; 
} 
exports.getLocalStorage = getLocalStorage; 

、あなたがこの機能を必要といつでも、単純にrequireモジュールutils

var helpers = require('utils'); 
exports.index = function(req, res){ 
    localStorage = helpers.getLocalStorage('firstValue'); 
    res.render('social/index', {title: "Start"}); 
} 

EDIT コメントでショーンで述べたように、このアプローチは、限り、あなたはNode's core modulesは異なる名前を使用してnode_modulesフォルダを名前として機能します。理由は次の理由によるものです。

コアモジュールは、識別子が の場合、常に優先的にロードされます(require()に渡されます)。たとえば、require( 'http')は、その名前のファイルがある場合でも、組み込みのHTTPモジュール を常に返します。

+0

はい。 \t { のvarのlocalStorageは=( 'ノード-のlocalStorage')を必要と 'exports.getLocalStorage =機能(){ 場合(typeof演算のlocalStorage === "未定義" ||のlocalStorage === nullの):私はsimillar何かをしました。ローカルストレージ; localStorage =新しいLocalStorage( './ scratch'); } return localStorage; }; ' 「ベストプラクティス」と考えるか?私はNode/expressを学びたいと思っています。私が何を意味しているか知っていれば、それは正しい方法です。 – JOSEFtw

+1

さて、実際にあなたがしようとしていることに依存しています。私は知っている "共通の知恵"は共通の機能のためのlib /フォルダを使用することです(TJ Holowaychuk自身[ここ](http://vimeo.com/56166857)のアドバイスとして) [ローカライズされたヘルパー](https:// github。com/madhums/nodejs-express-mongoose-demo/tree/master/test)を実行します。私は 'require( 'utils')'の 'utils'へのパスを気にする必要がないので、このメソッドを好む(他のすべてのメソッドは相対パスを使います)。 – verybadalloc

+0

@varybadalloc:私はNodeプロジェクトにアクセスできました(Nodeは私には初めてです)。既存のNodeパッケージと思われるrequire( 'util')がすでにあることに気付きました。接続権はありませんか?もしそうなら、私は分かりやすくするためヘルパーモジュールの名前を変えるだけです。 – Sean

関連する問題