Node.js NodeJs路由中间件即使没有路径也可以工作

Node.js NodeJs路由中间件即使没有路径也可以工作,node.js,express,middleware,Node.js,Express,Middleware,这是我使用的代码 在webserver.js中 var objApiServer = require('./node_scripts/ApiServer'); app.use('/APICalls/', objApiServer); var objApiServer = require('./node_scripts/ApiServer'); var objApiServer1 = require('./node_scripts/ApiServer1'); app.use('/APICalls

这是我使用的代码

在webserver.js中

var objApiServer = require('./node_scripts/ApiServer');
app.use('/APICalls/', objApiServer);
var objApiServer = require('./node_scripts/ApiServer');
var objApiServer1 = require('./node_scripts/ApiServer1');
app.use('/APICalls', objApiServer(router, request));
app.use('/GetDbData', objApiServer1(router, request));
在ApiServer.js中

module.exports = function (router, request) {

//FUNCTION 
router.get('/GetDbData', function (req, res) {
/* SAMPLE CODE GOES HERE */
});

}
module.exports = function (router, request) {
  //FUNCTION 
  return new express.Router()
  .get('/GetDbData', function (req, res) {
     /* SAMPLE CODE GOES HERE */
  })
  .post('/PostDbData', function (req, res) {
     /* SAMPLE CODE GOES HERE */
  });
}
url路径上的

//mysite.domain/APICalls/GetDbData

工作正常

但它可以继续工作

//mysite.domain/GetDbData(我不想要)

我错过什么了吗。如果我想要另一个函数呢

对于//mysite.domain/GetDbData

我在webserver.js中使用了另一个函数

app.get('/GetDbData' .......

但是它不接收任何呼叫,而是传递公共路由器对象。您可以在每个路由文件(如ApiServer.js、ApiServer1.js等)中创建一个新的路由器对象

下面是相同的代码段:

在webserver.js中

var objApiServer = require('./node_scripts/ApiServer');
app.use('/APICalls/', objApiServer);
var objApiServer = require('./node_scripts/ApiServer');
var objApiServer1 = require('./node_scripts/ApiServer1');
app.use('/APICalls', objApiServer(router, request));
app.use('/GetDbData', objApiServer1(router, request));
在ApiServer.js中

module.exports = function (router, request) {

//FUNCTION 
router.get('/GetDbData', function (req, res) {
/* SAMPLE CODE GOES HERE */
});

}
module.exports = function (router, request) {
  //FUNCTION 
  return new express.Router()
  .get('/GetDbData', function (req, res) {
     /* SAMPLE CODE GOES HERE */
  })
  .post('/PostDbData', function (req, res) {
     /* SAMPLE CODE GOES HERE */
  });
}
在ApiServer1.js中

module.exports = function (router, request) {
  //FUNCTION 
  return new express.Router()
  .put('/UpdateDbData', function (req, res) {
     /* SAMPLE CODE GOES HERE */
  });
}

这是演示代码。请尝试以这种方式实施:

在webserver.js中--

在ApiServer.js中--

下面是上述代码段的输出截图:


我解决了这个问题,我在这里发布了我的答案。我有多条路线,其中一条是

app.use('/APICalls/', objApiServer);
app.use('/RouterA', objRouterA);
app.use('/', objRouterB);
最后一条路线就是问题所在。Its允许在没有完整路径的情况下调用任何路由器功能。所以如果我打电话

//mysite.domain/APICalls/func1APICalls

//mysite.domain/func1picalls

它将被路由到“objApiServer”中的相同函数

将最后一行更改为

app.use('/B/', objClassA);

解决了问题

与我发布的代码相同。。。。你检查过我的问题了吗?当路径没有“/APICalls/”时,我不希望路由器功能工作。嘿,我对答案做了更改。请检查@DrVishnuthanks以了解更改,但我不明白为什么我需要额外的路由器?你可以查看下面的答案截图。这就是我所需要的……让我试试,我认为这与我所实现的类似。无论如何,非常感谢分享截图,因为这有助于其他人理解我的问题…:-)我在webserver.js文件中还有一些“app.use('/',objAnother);”,当我对它们进行注释时,它们都是有效的…@DrVishnu,正如你所说,在注释掉其他
app.use(…)
你的代码之后。你能从你的
webserver.js
中分享更多的代码吗。这样我们就可以更好地了解出了什么问题,或者需要做哪些更改才能使用完整的代码。。问题是,如果我们有任何路由器带有“app.use('/',objAnother)”;我们可以在没有完整路径的情况下调用路由器内部的任何函数。。。我会将回复作为答案,引用代码。再次感谢