【问题标题】:Include a module for all routes at express.js 4在 express.js 4 中包含所有路由的模块
【发布时间】:2014-09-19 15:44:56
【问题描述】:

我正在使用 Express 4.2.0

是否可以在 app.js 中包含仅一次的模块并在任何定义的路由中使用它?

现在这行不通:

app.js

//..
var request = require('request');

var routes = require('./routes/index');
var users = require('./routes/users');

app.use('/', routes);
app.use('/users', users);
//...


routes/user.js

var express = require('express');
var router = express.Router();

router.get('/add', function(req, res) {
    var session = req.session;
    request('http://localhost:8181/Test?val1=getDepartments', function (error, response, body) {
       //...
    });

    res.render('users/add');
});

module.exports = router;

会说routes/user.js中没有定义“请求”

ReferenceError: 请求未定义 在 Object.module.exports [作为句柄] (C:\inetpub\wwwroot\node7\routes\users. js:12:5)

必须在每条想要使用它们的路由中包含模块听起来不是一个合适的解决方案...

【问题讨论】:

  • 为什么这不是一个合适的解决方案?这意味着只使用你真正需要的依赖项。

标签: node.js express express-4


【解决方案1】:

是的,在 Node.js 中创建全局变量有两种方式,一种使用global object,另一种使用module.exports

方法如下,

方法 1. 声明不带 var 关键字的变量。就像importModName = require('modxyz') 一样,它将存储在全局对象中,因此您可以在任何地方使用它,例如global.importModName

方法 2. 使用导出选项。 var importModName = require('modxyz'); module.exports = importModName ; 你可以在其他模块中使用它。

在这里查看更多解释http://www.hacksparrow.com/global-variables-in-node-js.html

【讨论】:

  • FWIW 使用global,尤其是这样,通常不受欢迎,很容易导致问题。
  • 全局对象可用于小型项目。正如你所说,它必须在大型项目中几乎不使用。
  • 我应该复制引用那些包含文件的app.use() 吗?即:var bodyParser = require('body-parser'); app.use( bodyParser.json() );
  • 你能回答我最后的评论吗?
  • 你不需要复制 app.use 。只需导入所需的模块即可。
【解决方案2】:

您可以省略var 而只使用request = require('request');,但这是不受欢迎的。

Node.js 缓存模块。标准方法是在需要的地方要求模块。

【讨论】:

    猜你喜欢
    • 2016-11-23
    • 1970-01-01
    • 2016-10-03
    • 2014-10-09
    • 1970-01-01
    • 1970-01-01
    • 2021-12-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多