我试图在表单中实现永久链接/2013/02/16/title-with-hyphens.我想使用路由参数.如果我尝试以下路线:
app.get('/:href', function(req, res) { });
Run Code Online (Sandbox Code Playgroud)
...然后我得到一个404,大概是因为Express只寻找一个参数,并认为有4个.
我可以解决这个问题/:y/:m/:d/:t,但这会迫使我的固定链永久地成为这种形式.
如何获取包含斜杠的路由参数?
Tad*_*spy 30
似乎app.get("/:href(*)", ...)工作正常(至少在Express 4中).您将获得参数值req.params.href.
它也会被/路线发射,这可能不是你想要的.您可以通过app.get('/', ...)在应用程序中的其他位置设置或显式检查空字符串来避免它.
jos*_*736 29
使用正则表达式而不是字符串.
app.get(/^\/(.+)/, function(req, res) {
var href = req.params[0]; // regexp's numbered capture group
});
Run Code Online (Sandbox Code Playgroud)
请注意,您不能使用字符串syntax(app.get('/:href(.+)')),因为Express仅允许路由字符串中的一小部分正则表达式,并且它使用这些正则表达式作为路由的特定组件的条件检查.它不捕获条件中的匹配内容,也不允许您跨组件匹配(由斜杠分隔的URL部分).
例如:
app.get('/:compa([0-9])/:compb([a-z]/')
Run Code Online (Sandbox Code Playgroud)
如果第一个组件(compa)是单个数字,并且第二个组件(compb)是单个字母az ,则此路由仅匹配.
'/:href(.+)'说"仅当内容是任何东西时匹配第一个组件",这没有多大意义; 这无论如何都是默认行为.此外,如果您检查源,您将看到Express实际上强制该条件中的点为文字.
例如,app.get('/:href(.+)')实际编译成:
/^\/(?:(\.+))\/?$/i
Run Code Online (Sandbox Code Playgroud)
请注意,您.已被转义,因此此路线仅匹配一个或多个期间.
| 归档时间: |
|
| 查看次数: |
11673 次 |
| 最近记录: |