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

时间:2017-06-13 05:42:22

标签: node.js express middleware

这是使用

的代码 webserver.js中的

var objApiServer = require('./node_scripts/ApiServer');
app.use('/APICalls/', objApiServer);

和ApiServer.js

module.exports = function (router, request) {

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

}

on url path

  

// mysite.domain / APICALLS / GetDbData

工作正常

但它适用于

  

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

我错过了什么。如果我想要另一个功能

怎么办?

表示//mysite.domain/GetDbData

我把另一个函数放在webserver.js中,带

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

但它没有接到任何电话

3 个答案:

答案 0 :(得分:1)

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

在webserver.js中 -

var express = require('express');
var objApiServer  = require('./router/ApiServer');

var app = express();

app.use('/APICalls/', objApiServer);

app.listen(3000);

在ApiServer.js中 -

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

router.get('/GetDbData', function(req, res, next) {
    /* SAMPLE CODE GOES HERE */
    res.send("GetDbData route called");
});

module.exports = router;

以下是上述代码段输出的屏幕截图:

enter image description here

enter image description here

enter image description here

enter image description here

答案 1 :(得分:0)

而不是传递公共路由器对象。您可以在每个路由文件中创建一个新的路由器对象,例如ApiServer.js,ApiServer1.js等。

以下是相同的代码段:

在webserver.js

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 
  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 */
  });
}

答案 2 :(得分:0)

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

app.use('/APICalls/', objApiServer);
app.use('/RouterA', objRouterA);
app.use('/', objRouterB);

最后一条路线是问题。它可以在没有完整路径的情况下调用任何路由器功能。所以,如果我打电话

  

// mysite.domain / APICALLS / func1APICalls

  

// mysite.domain / func1APICalls

它将被路由到“objApiServer”

中的相同功能

将最后一行更改为

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

解决了问题

相关问题