我的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背后的想法是创建路由,但我如何在内部调用它们
答案 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