6

我正在尝试学习 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 的东西?但是我怎样才能在我的路由中访问 app 对象呢?

4

1 回答 1

15

有很多方法可以做到这一点,具体取决于您计划使用辅助方法的方式/位置。utils我个人更喜欢使用我需要的所有帮助程序和实用程序方法来设置我自己的 node_modules 文件夹,称为。

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

应用程序.js
数据库.js
包.json
意见/
   索引.ejs
   ...
路线/
   index.js
   ...
节点模块/
   表示/
   ...

只需在utils下添加一个文件夹,node_modules其中包含一个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;

然后,只要您需要此功能,只需require模块utils

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

编辑 正如Sean在评论中所指出的,只要您将 node_modules 文件夹命名为与Node 的 core modules不同的名称,这种方法就可以工作。这是因为:

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

于 2013-06-23T14:58:04.703 回答