从NodeJS

时间:2016-08-14 21:52:49

标签: javascript node.js http express routing

我的API有一个ExpressJS路由,我想从NodeJS中调用它

var api = require('./routes/api')
app.use('/api', api);

并在我的 ./ routes / api.js 文件

var express = require('express');
var router = express.Router();
router.use('/update', require('./update'));  
module.exports = router;

所以,如果我想从我的前端调用/api/update/something/:withParam,那么它的所有查找,但我需要在我的NodeJS脚本的另一个方面调用它,而不必在第二个位置再次重新定义整个函数

我尝试过使用内部的HTTP模块但是我得到了“ECONNREFUSED”错误

http.get('/api/update/something/:withParam', function(res) {
   console.log("Got response: " + res.statusCode);
   res.resume();
}).on('error', function(e) {
  console.log("Got error: " + e.message);
});

我理解Express背后的想法是创建路由,但我如何在内部调用它们

2 个答案:

答案 0 :(得分:2)

这是在 Express 4 中进行内部重定向的简单方法:

魔术可以执行的功能是: app._router.handle()

测试:我们向 home “ /” 发送请求,并将其重定向到 otherPath “ / other / path”

var app = express()

function otherPath(req, res, next) {
  return res.send('ok')
}

function home(req, res, next) {
  req.url = '/other/path'
  /* Uncomment the next line if you want to change the method */
  // req.method = 'POST'
  return app._router.handle(req, res, next)
}

app.get('/other/path', otherPath)
app.get('/', home)

答案 1 :(得分:0)

我为此专门制作了一个中间件:uest

req中可用,它使您可以req.uest另一条路线(来自给定路线)。

它将原始cookie转发给后续请求,并在各个请求之间保持req.session同步,例如:

app.post('/login', async (req, res, next) => {
  const {username, password} = req.body

  const {body: session} = await req.uest({
    method: 'POST',
    url: '/api/sessions',
    body: {username, password}
  }).catch(next)

  console.log(`Welcome back ${session.user.firstname}!`

  res.redirect('/profile')
})

它支持Promise,await和错误优先回调。

有关更多详细信息,请参见README