如何访问ExpressJS中的URL段

Cod*_*rts 2 node.js express

所以我们假设我们有以下网址:

http://example.com/shops/map/search
Run Code Online (Sandbox Code Playgroud)

我想访问第二个段(map)并检查其值.我如何在Express中实现这一目标?提前致谢!

Rat*_*mar 8

您必须配置您的快速路线以接受网址段.

app.get('/shops/:type/search', function (req, res) {
    res.send(req.params)
})
Run Code Online (Sandbox Code Playgroud)

对于像http://example.com/shops/map/search这样的请求

req.params将包含必需的URL段.

Request URL: http://example.com/shops/map/search
req.params: { "type": "map" }
Run Code Online (Sandbox Code Playgroud)


Jon*_*ski 6

您可以使用具有一组常量值的路由参数。

Express 用于path-to-regexp解析您为路由提供的字符串。该包允许提供带有参数的自定义模式来限制可以匹配的值。

app.get('/shops/:kind(list|map)/search', searchShops);
Run Code Online (Sandbox Code Playgroud)

括号 的内容(...)是部分 RegExp 模式,在这种情况下相当于:

/(?:list|map)/
# within a non-capturing group, match an alternative of either "list" or "map" literally
Run Code Online (Sandbox Code Playgroud)

然后,在 内searchShops,您可以确定哪个值被赋予了req.params

function searchShops(req, res) {
    console.log(req.params.kind); // 'list' or 'map'
    // ...
}
Run Code Online (Sandbox Code Playgroud)

或者,您可以让参数保持打开状态,检查处理程序中的值,并next('route')在值不可接受时调用:

app.get('/shops/:kind/search', searchShops);

var searchKinds = ['list', 'map'];

function searchShops(req, res, next) {
    if (!searchKinds.includes(req.params.kind)) return next('route');

    // ...
}
Run Code Online (Sandbox Code Playgroud)


小智 5

您可以通过将url拆分为数组来访问url段.像这样:

let requestSegments = req.path.split('/');
Run Code Online (Sandbox Code Playgroud)