Nodejs 怎么在express的路由中匹配带有问号的url?

Nodejs 怎么在express的路由中匹配带有问号的url?

我有一个url,其中包括了问号,比如说__http://localhost:3000/auth?code=13579__, 要怎样设定路由正确的进行匹配呢?

以下几种我试过都没有用

  • app.get("/auth?code=:code", function(req, res) {…});
  • app.get("/auth?code=:code", function(req, res) {…});
  • app.get(//auth?code=:code/, function(req, res) {…});

5 回复

在使用 Express 框架处理 URL 时,如果 URL 包含查询字符串(即带有问号 ? 的部分),Express 默认不会直接匹配这些查询参数。查询字符串会被解析并存储在请求对象 req.query 中。

针对你的问题,你希望根据 code 查询参数来匹配路由。你可以通过检查 req.query.code 来实现这一点。下面是一个简单的示例代码:

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

// 定义一个基本的路由,用于处理所有 /auth 的请求
app.get('/auth', (req, res) => {
    // 从 req.query 中获取 code 参数
    const code = req.query.code;
    
    if (code === '13579') {
        // 如果 code 等于 13579,则返回相应的响应
        res.send('Code matched!');
    } else {
        // 否则返回错误信息
        res.status(400).send('Invalid code.');
    }
});

// 启动服务器监听端口 3000
app.listen(3000, () => {
    console.log('Server is running on port 3000');
});

在这个例子中,我们定义了一个 /auth 的路由。当请求该路径时,我们从 req.query 中提取 code 参数,并根据其值返回不同的响应。

如果你需要更复杂的匹配逻辑,例如基于不同的 code 值执行不同的操作,可以将条件判断逻辑扩展到函数内部。

关键点总结:

  • 查询参数 存储在 req.query 对象中。
  • 不需要在路由路径中包含查询参数(如 ?code=...)。
  • 在路由处理函数中,通过 req.query.code 访问查询参数。

这种方式使得 Express 能够正确地处理带有查询字符串的 URL,并允许你在路由处理函数中灵活地访问和使用这些参数。


app.get("/auth")这样就好了啊。。。后面的参数干嘛要匹配啊????

路由只匹配path部分,不匹配querystring啊

app.use (req, res, next) ->
    if req.query.code
        doSomething
    else
        next()

oauth2验证的时候会出现querystring,需要对它进行匹配

在Express中,URL中的查询参数(如?code=13579)不会被包含在路由路径中。查询参数通常作为req.query对象的一部分来访问。

示例代码

假设你的目标是处理类似 http://localhost:3000/auth?code=13579 的URL,你可以这样设置路由:

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

app.get('/auth', function(req, res) {
    const code = req.query.code;
    if (code) {
        // 处理 code 参数
        res.send(`Code received: ${code}`);
    } else {
        res.status(400).send('No code parameter provided.');
    }
});

app.listen(3000, () => {
    console.log('Server is running on port 3000');
});

解释

  • /auth 是实际的路由路径。
  • req.query 是一个对象,包含了所有从URL中解析出来的查询参数。
  • 在上面的例子中,req.query.code 将会获取到 code=13579 中的 13579 值。

因此,你不需要在路由路径中包含查询字符串。查询字符串会被自动解析,并且可以通过 req.query 访问到。

注意

  • 如果没有提供查询参数,req.query 对象将会是空的。
  • 你可以在req.query中访问所有的查询参数,例如:req.query.name, req.query.age 等等。

这种方法非常灵活,可以轻松地处理复杂的查询字符串。

回到顶部