我有三个文件server.js, views.js
和access.js
在server.js
我已将所有dependencies
和一些routes
添加为
app.post('/services/getallversions', (req, res) => {
...
// code to handle the req and send response
})
在views.js
我的代码如下,
module.exports = function(app, db, bodyParser, rules, constants, query) {
app.post('/services/user/:user/:type', (req, res) => {
// user can be 'abcd'
// type can be addview, deleteview etc.
...
// do processing for the req and send res
})
}
在access.js
我有代码,
module.exports = function(app, db, bodyParser, rules, constants, query) {
app.post('/services/user/:user/:type', (req, res) => {
// user can be 'abcd'
// type can be addaccess, removeaccess etc.
...
// do processing for the req and send res
})
}
在server.js
文件中,我需要以下列方式access.js and views.js
,
var access = require('./access')(app, db, bodyParser, rules, constants, query)
var views = require('./views')(app, db, bodyParser, rules, constants, query)
当我尝试POST
使用/services/user/abcd/addaccess
我的views.js
文件代码被执行时。 constants, query, rules
是其他.js
文件,已使用server.js
在require('./filename')
中使用。
我理解由于相同的网址结构导致歧义。我正在使用Express 4和Node JS 6.我想将access.js
和views.js
的代码与server.js
分开,并将它们放在单独的文件中,并以上述方式要求它们。 views.js
和access.js
由我创建。它们不是任何Javascript Framework或类似的东西。
在view.js
我也尝试过以下代码
var router = require('express').Router()
router.post('/services/user/:user/:type', (req,res)=>{})
但存在同样的问题。有没有办法实现这个目标?
答案 0 :(得分:0)
我建议你在Express中使用“miniApp”概念,其中每个“miniApp”都使用名称空间来区分。
例如: 主要应用:
带有'/ views / ...'前缀的所有路由都将转到viewsCtrl。此中间件应出现在默认/主应用程序路由之前:
var viewsCtrl = require('./views');
app.use('/views', viewsCtrl);
Inside views.js:
var router = require('express').Router();
// complete route /views/services/user/:user/:type
router.get('/services/user/:user/:type', function(req, res){...});
module.exports = router;
相同的access.js。
答案 1 :(得分:0)
路线是相同的,快递将永远无法分辨哪一个。订单不是问题;正如Chris G在评论中所说,对app.post(...)
的第二次调用将覆盖第一次(将URL视为散列集中的键)。
您已经知道网址格式为/addview
或/removaccess
等,因此您可以将这些知识放在路由中间件中:
// access.js
app.post('/services/user/:user/access/:type', (req, res) => {
// ... type is now only add, remove, etc...
})
// view.js
app.post('/services/user/:user/view/:type', (req, res) => {
// ...
})
甚至(我认为):
// access.js
app.post('/services/user/:user/:type((access)$)/', (req, res) => {
// ... will match addaccess, removeaccess and so on
// but I'm not entirely sure ...
})
参考此处: