gpt4 book ai didi

javascript - 在 router.use 中定义参数时如何获取参数?

转载 作者:行者123 更新时间:2023-11-30 00:34:03 27 4
gpt4 key购买 nike

这是 Express 4.x。让他们我有以下架构:

server.js

var express = require('express');
var mainRouter = express.Router();
var subRouter = express.Router();

subRouter.route('/').get(function(req, res, next) {
console.log(req.params);
});

mainRouter.use('/:username', subRouter);

app.use('/', mainRouter);

然后我调用 GET/Amberlamps。我希望 req.params{ username: 'Amberlamps' },但我得到的是 {}

但是,如果我将 subRouter 中的路由更改为:

subRouter.route('/:city').get(function(req, res, next) {
console.log(req.params);
});

然后调用 GET/Amberlamps/Berlinreq.params{ city: 'Berlin' }

如何获取:username

编辑:应要求,我想解释一下,为什么我想将路由器用作subRouter

假设我想构建一个具有以下架构的 RESTful api 服务器:

[path_to_api_server]/[version]/[resource]http//api.example.com/1/users

server.js

mainRouter.use('/:version/items', itemsRouter);
mainRouter.use('/:version/messages', messagesRouter);
mainRouter.use('/:version/users', usersRouter);

app.use('/', mainRouter);

usersRouter.js

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

usersRouter.route('/')
.get(getUser)
.post(postUser)
.put(putUser)
.delete(deleteUser);

module.exports = usersRouter;

这样做的美妙之处在于,每个资源路由器都可以工作,甚至不需要知道它正在监听哪条路径。然而,资源路由器需要知道 :version 中定义的版本号,因为功能可能不同。

最佳答案

我有一个可能适合您需要的答案。由于 subRouter 被 mainRouter 封装,因此无法访问 version,添加一个中间件,将版本从 main 传递给 subRouter。

var express = require('express');
var mainRouter = express.Router();
var subRouter = express.Router();

var app = express();

var apiRoutes = {
itemRouter : function(req, res, next){
console.log('/items','version',req.version,req.params);
next();
},
messagesRouter : function(req, res, next){
console.log('/messages','version',req.version,req.params);
next();
},
usersRouter : function(req, res, next){
console.log('/users','version',req.version,req.params);
next();
}
}

subRouter.route('/items/:id').get(apiRoutes.itemRouter);
subRouter.route('/messages/:id').get(apiRoutes.messagesRouter);
subRouter.route('/users/:id').get(apiRoutes.usersRouter);

//attach a middleware that will pass through the version to the subrouter via the request object
mainRouter.use('/:version', function(req, res, next){
console.log('version', req.params.version);
req.version = req.params.version;//pass version via req object
next();
});

//attach your subRouter
mainRouter.use('/:version',subRouter)

app.use('/', mainRouter);

app.listen(3000);

关于javascript - 在 router.use 中定义参数时如何获取参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27986687/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com