如何在Node.js / Express中组织路由依赖

时间:2016-06-14 11:13:44

标签: javascript node.js express

我理解如何将路由导出到index.js文件,但我遇到的问题是我不明白如何正确引用这些外部路由依赖关系,而不将它们粘贴到文件的顶部。

换句话说,如果我有程序的入口点(称为index.js) 我有一个依赖项列表:

index.js

const Sequelize = require("sequelize");
const connection = new Sequelize("jsfsa", "root", "password");
const bcrypt = require("bcryptjs");
const salt = bcrypt.genSaltSync(10);
const express = require('express');
const path = require('path');
const http = require('http');
const bodyParser = require('body-parser');
const app = express();
const session = require('client-sessions');
const expressHbs = require('express-handlebars');
const csrf = require("csurf");

// .....etc....

然后我在外部文件中引用了一条路线(比如一条路线):

路由/ login.js

exports.submitLogin = (req, res) => {
   // do a bunch of stuff that requires the dependencies referenced in index.js
}

我不知道如何引用任何依赖关系而不仅仅放置所需的模块"需要"在路线文件中。

路由/ login.js

const Sequelize = require("sequelize");
const connection = new Sequelize("jsfsa", "root", "password");
const bcrypt = require("bcryptjs");
const salt = bcrypt.genSaltSync(10);
const express = require('express');
const path = require('path');
const http = require('http');
const bodyParser = require('body-parser');
const app = express();
const session = require('client-sessions');
const expressHbs = require('express-handlebars');
const csrf = require("csurf");

// .....etc....




exports.submitLogin = (req, res) => {
   // do a bunch of stuff that requires the dependencies referenced in index.js
}

我想相信有一种方法可以将所有模块引用放在文件my_dependencies.js中,然后使用一行代码简单地从我的应用程序中的所有其他页面引用整个文件调用

如果可能的话,好奇。

我已尝试在线阅读如何处理这个问题,一切都让我很困惑。

1 个答案:

答案 0 :(得分:0)

我这样做的方法是直接将我需要的依赖变量传递给处理该特定路由的函数。在你的情况下:

index.js (或在您的路线定义的任何地方)

app.post('/someRoute', require('routes/login').submitLogin(dependency1, dependency2));
//If you are using express.Router() to handle routes/sub-routes,
//then this line could be different

<强>路由/ login.js

exports.submitLogin = function(dependency1, dependency2)
    return function(req, res){
       // do a bunch of stuff that requires the dependencies referenced in index.js
    }
}

当然,在这种做法中,我依赖于你不会在每个函数中使用每一个依赖的事实,这会破坏它的观点。 /> 这也允许我将其他上下文或状态相关变量传递给我的路由处理程序。

还可以简单地将您的依赖变量放在app变量中,例如:

app.dependency=someobject;

虽然这可以假设您使用req.app.dependency1访问您的依赖项,但建议不要这样做,因为它可能会干扰app对象的现有子项。