所以乍一看听起来很棘手,我会解释一下我实际上想做什么: 我正在使用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时,它们不起作用
答案 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);