表达处理路由的正确方法

时间:2018-02-19 13:19:58

标签: javascript node.js express ecmascript-6

看我的情况是我已经将express.js库初始化为变量,并且问是否有办法将app.js中的express变量传递给users.js。我的理解是它无法完成而且我有如果我想在user.js

中使用表达式库函数,则单独在users.js中导入它

然后我看到了下面的apporach

我看到的是什么 App.js

var express= require('express');
var app = express();
//Some code...
//Some code...
  var users = require('./routes/users.js');
  app.use('/',users);

路线/ user.js的

   module.exports = (app,passport) = > {
   app.get('/route/',(req,res)=>{

  });

}

我到目前为止所做的是在js文件中也要求它。那么处理这种情况的最佳方法是什么

App.js

var express= require('express');
var app = express();

//Some code...
//Some code...
  var users = require('./routes/users.js');
  app.use('/',users);

路线/ user.js的

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

   router.get('/route/',(req,res)=>{
     //some action
  });

 module.exports = router;

以及如何使用ecma脚本变量

编辑: -

如果不在users.js中导入express变量,此代码如何工作 app.js

var express= require('express');
var app = express();

var users = require('./routes/users.js');
app.use('/',users);

路线/ users.js

module.exports = (app)=>{

    app.get('',(req,res)=>{
   //some code
   });
}

2 个答案:

答案 0 :(得分:0)

首先,将ECMAScript与变量一起使用非常简单。只需使用let代替var。区别在于范围界定。 var自动将变量分配给全局范围,这意味着可以在整个文件中访问它。如果您不小心使用相同的变量名两次,这可能会导致大型复杂文件出现问题。另一方面,let仅将变量分配给本地范围。因此,如果你在函数中使用let,它只会存在于该函数中。因此,如果在该函数之外使用相同的变量名,则文件将按预期运行。

其次,虽然您建议的替代方法的性质并不完全清楚,但您通常需要在每个使用它的文件中require库。即使通过修补你以某种方式找到另一种有效的方法,这通常被认为是最佳实践。

答案 1 :(得分:0)

Express确实为第二个用例引入了Express.Router,所以是的,它完全有效:

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

router.get('/route/', (req,res) => {
 //some action
});

module.exports = router;

第一种方法也有效,但我认为这只会使事情复杂化。如果您确实需要两个不同文件中的某些内容(例如passport),则应将其提取到单独的模块中并将其导入两个位置。如果您确实想要在导入链中传递值,则实际需要在需要时调用它:

//user.js
module.exports = app => {
 app.get("/user", "whatever");
}

//app.js
const app = express();
require("/user.js")(app); // <---