假设我有以下结构:
http://localhost:4000/projects/:project_id/context_items/:ci_id
我有项目和context_items的单独路由器,但问题是 当我在context_items路由时,我需要访问project_id参数,但它在req.param中不存在。
当我设置我的路线时,我会这样做:
module.exports = (app)=>{
app.param('project_id', (req, res, next, project_id)=>{
console.error(project_id);
next();
});
app.param('ci_id', (req, res, next, ci_id)=>{
console.error(ci_id);
next();
});
//Routes setting....
const projectsRouter = require("./client/projects");
app.use("/projects", projectsRouter)
const contextItemsRouter = require("./client/context_items");
app.use("/projects/:project_id/context_items", contextItemsRouter);
....
project_id触发但ci_id未命中....我可以编写一个函数并从基本URL中提取project_id,但是访问project_id的正确方法是什么?
答案 0 :(得分:1)
选中https://expressjs.com/en/4x/api.html#express.router
简而言之:
var router = express.Router({mergeParams: true})
答案 1 :(得分:0)
如果您的GET
设置中有API
个请求,请执行以下操作:
app.get('/projects/:project_id/context_items/:ci_id', function(req, res) {})
您可以使用project_id
访问ci_id
和req.param
。
但是,如果你有一个参数中间件,如:
app.param('[project_id', 'ci_id']', (req, res, next, value)=>{
next();
});
您可以将任何想要的内容绑定到请求中,例如req.value = value
由于中间件在与project_id
或ci_id
参数匹配的每条路径之前运行,因此req.value
值会根据您的请求而变化。
因此,如果您的服务器收到此请求:GET /project/12/context_items/24
并且您的API
设置的路由记录了req.param
的值:
app.get('/projects/:project_id/context_items/:ci_id', function(req, res) {
console.log(req.value)
});
首先记录12,然后记录24。