有没有办法在单个函数调用中进行此操作?
var todo = function (req, res){};
app.get("/", todo);
app.get("/blabla", todo);
app.get("/blablablabla", todo);
类似的东西:
app.get("/", "/blabla", "/blablablabla", todo );
我知道这是一个语法混乱,但只是为了了解我想要实现的目标,一系列的路线将是非常棒的!
任何人都知道怎么做?
答案 0 :(得分:84)
我在寻找相同的功能时遇到了这个问题。
@Jonathan Ong在上面的评论中提到,不推荐使用路径使用数组,但它在Express 4中有明确描述,它适用于Express 3.x.这是一个可以尝试的例子:
app.get(
['/test', '/alternative', '/barcus*', '/farcus/:farcus/', '/hoop(|la|lapoo|lul)/poo'],
function ( request, response ) {
}
);
从request
对象内部,路径为/hooplul/poo?bandle=froo&bandle=pee&bof=blarg
:
"route": {
"keys": [
{
"optional": false,
"name": "farcus"
}
],
"callbacks": [
null
],
"params": [
null,
null,
"lul"
],
"regexp": {},
"path": [
"/test",
"/alternative",
"/barcus*",
"/farcus/:farcus/",
"/hoop(|la|lapoo|lul)/poo"
],
"method": "get"
},
注意params会发生什么:它知道所有可能路径中的捕获组和params,无论它们是否在当前请求中使用。
因此,可以轻松地通过数组堆叠多个路径,但如果您希望从通过params或捕获组使用的路径中获取有用的任何内容,那么副作用可能是不可预测的。它可能对冗余/混叠更有用,在这种情况下它可以很好地工作。
编辑:请同时查看@ c24w的回答below。
编辑2:这是一个中等受欢迎的答案。请记住,与大多数Node.js库一样,ExpressJS是一个可移动的盛宴。虽然上面的路由仍然有用(我现在正在使用它,这是一个非常方便的功能),但我无法保证请求对象的输出(它肯定与我所描述的不同)。请仔细测试以确保您获得所需的结果。
答案 1 :(得分:50)
app.get('/:var(bla|blabla)?', todo)
:var
设置您不使用的req.param
。它仅用于设置正则表达式。
(bla|blabla)
设置匹配的正则表达式,因此它匹配字符串bla
和blablah
。
?
使整个正则表达式可选,因此它也匹配/
。
答案 2 :(得分:46)
您实际上可以传递一个路径数组,就像您提到的那样,并且效果很好:
var a = ['/', '/blabla', '/blablablabla'];
app.get(a, todo);
答案 3 :(得分:24)
只是详细说明Kevin's answer,这来自4.x docs:
调用中间件函数的路径;可以是以下任何一种:
- 表示路径的字符串。
- 路径模式。
- 用于匹配路径的正则表达式模式。
- 上述任意组合的数组。
他们有一些examples,包括:
这将匹配以
/abcd
,/xyza
,/lmn
和/pqr
开头的路径:app.use(['/abcd', '/xyza', /\/lmn|\/pqr/], function (req, res, next) { next(); });
答案 4 :(得分:6)
我去了:
center
答案 5 :(得分:0)
需要原始路线的文件,并像这样定义新路线
myapp.serialization.media_handler:
class: Path\ToYourApp\Serializer\MediaSerializationHandler
tags:
- { name: jms_serializer.handler, type: Path\ToYourMedia\Entity\Media, direction: serialization, format: json, method: serializeMedia }
arguments: [ @sonata.media.provider.image, @sonata.media.provider.file ]