注册帮助函数Node.JS + Express

我试图学习NodeJS和Express。 我使用node-localstorage包来访问本地存储。 这在直接在函数中使用代码时可以工作

路线/ 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的东西? 但是,我怎样才能访问我的路线中的应用程序对象?

有很多方法可以做到这一点,这取决于你打算如何/在哪里使用你的帮手方法。 我个人更喜欢用我需要的所有助手和实用程序方法来设置我自己的node_modules文件夹(称为utils

例如,假设以下项目结构:

 app.js
 db.js
的package.json
意见/
    index.ejs
    ...
路线/
    index.js
    ...
 node_modules /
   performance/
    ...

只需在node_modules下添加一个utils文件夹,其中包含一个index.js文件:

 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; 

那么,任何时候你需要这个function,只require模块utils

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

编辑正如注释中的Sean所指出的,只要您使用不同于Node的核心模块的名称命名node_modules文件夹,此方法就可以工作。 这是因为:

如果核心模块的标识符被传递给require(),则核心模块总是被优先加载。 例如,require('http')将总是返回内置的HTTP模块,即使有这个名字的文件。