注册帮助函数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模块,即使有这个名字的文件。