如何在nodeJS内app.use()一个具有其他app.use()的文件

时间:2019-03-13 09:30:17

标签: javascript node.js express module node-modules

所以乍一看听起来很棘手,我会解释一下我实际上想做什么: 我正在使用NodeJS和expressJS,并且正在尝试对项目进行模块化,这是我想做的事情: 假设我在主服务器.js文件中将router.get / post / put / delete等拆分为每种类型的其他文件: 例如:

...
app.use(require('./routes/account_method1.js'));
app.use(require('./routes/account_method2.js'));
app.use(require('./routes/games_method1.js'));
app.use(require('./routes/games_method3.js'));
app.use(require('./routes/emails_method5.js'));
...

我执行起来非常简单:我只是在主.js文件和我刚刚放入的必需文件中使用了上面提到的代码:

module.exports = router;

差不多了,但是问题是: 现在我想做类似的事情:

...
app.use(require('./routes/account/panel.js'));
app.use(require('./routes/games/panel.js'));
app.use(require('./routes/emails/panel.js'));
...

并且在每个./routes/x/panel.js文件中都包含需要使用的特定.js文件,仅以./routes/account.panel.js中的示例为例,我想拥有并工作:

app.use(require('./account_method1.js'));
app.use(require('./account_method2.js'));

假定account_method1.js和account_method2.js与特定的panel.js文件位于同一目录中,然后在主服务器.js文件中要求这些panel.js文件。

所以如果现在我有:

 Server ---> ./routes/account_method1.js
        ---> ./routes/account_method2.js

我想做到:

 Server ---> ./routes/account/panel.js ---> ./routes/account_method1.js
                                            ./routes/account_method2.js

我不会在此处粘贴任何代码,因为这只是有关文件导入方式的问题,我已经提到了如何在主服务器上需要我的.js文件。

S ...你怎么看?

编辑:

我想会告诉你问题出在哪里:

./ routes / test.js(此文件必须添加到应用程序另一个文件register.js)

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

 console.log("BEFORE ROUTER.USE");
 router.use(require('./register.js'));
 console.log("AFTER ROUTER.USE");

module.exports = router;

./ app.js(主.js服务器文件)

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

./ routes / register.js

 const express = require('express');
 const router = express.Router();
 ...
 //some router.post / get / delete 
 ...
 module.exports = router;

当我尝试访问该register.js文件中的URL时,它们不起作用

1 个答案:

答案 0 :(得分:0)

更好的方式是使用router

例如:controller/api.js

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

  router.get('/', function(req, res) {
      //console.log(res.apiData);
      res.json({message:'ok'});
  });

  module.exports = router;

及以后的

app.use('/api', require('controller/api'))

路由器可以导入到另一个路由器。我用这个:

main.js:

app.use(require('./controller'));

controller / index.js:

const express = require('express')
const router = express.Router()
const isAuth = require('../middlewares/is-auth')
const isValidApiKey = require('../middlewares/is-api-key')
const isAdmin = require('../middlewares/is-admin')

router.use('/auth', require('./auth'));
router.use('/profile', isAuth, require('./profile'));
router.use('/api', isValidApiKey, require('./api'));
router.use('/admin', isAuth, isAdmin, require('./admin'))

如果请求服务代码很长,您也可以将其移动到一个单独的文件中,但是我认为最好将其分成较小的可重用部分,并将其用作中间件,例如:

route.all('/:orderId(\\d+)', fileOrderMiddleware,  fileAltMiddleware, hasTransferMiddleware, orderServeMiddleware);