ExpressJS - URL 构建


我们现在可以定义路线,但这些路线是静态的或固定的。要使用动态路由,我们应该提供不同类型的路由。使用动态路由允许我们传递参数并基于它们进行处理。

这是动态路线的示例 -

var express = require('express');
var app = express();

app.get('/:id', function(req, res){
   res.send('The id you specified is ' + req.params.id);
});
app.listen(3000);

要测试此功能,请访问http://localhost:3000/123。将显示以下响应。

网址1号楼

您可以将 URL 中的“123”替换为其他内容,更改将反映在响应中。上面的一个更复杂的例子是 -

var express = require('express');
var app = express();

app.get('/things/:name/:id', function(req, res) {
   res.send('id: ' + req.params.id + ' and name: ' + req.params.name);
});
app.listen(3000);

要测试上述代码,请转到http://localhost:3000/things/tutorialspoint/12345

网址2号楼

您可以使用req.params对象来访问您在 url 中传递的所有参数。注意上面2个是不同的路径。它们永远不会重叠。另外,如果您想在获得“/things”时执行代码,那么您需要单独定义它。

模式匹配的路线

您还可以使用正则表达式来限制 URL 参数匹配。假设您需要id为 5 位长数字。您可以使用以下路由定义 -

var express = require('express');
var app = express();

app.get('/things/:id([0-9]{5})', function(req, res){
   res.send('id: ' + req.params.id);
});

app.listen(3000);

请注意,这只会匹配具有 5 位长id的请求。您可以使用更复杂的正则表达式来匹配/验证您的路线。如果您的路由均不匹配请求,您将收到“Cannot GET <your-request-route>”消息作为响应。使用这个简单的路线,此消息将被 404 未找到页面替换 -

var express = require('express');
var app = express();

//Other routes here
app.get('*', function(req, res){
   res.send('Sorry, this is an invalid URL.');
});
app.listen(3000);

重要提示- 这应该放在所有路由之后,因为 Express 会匹配index.js文件从头到尾的路由,包括您需要的外部路由器。

例如,如果我们定义与上面相同的路由,则在使用有效 URL 进行请求时,将显示以下输出。-

正确的正则表达式

对于不正确的 URL 请求,会显示以下输出。

无效的正则表达式(404)