【问题标题】:Express.js have problem with path url including ‘?’Express.js 的路径 url 有问题,包括“?”
【发布时间】:2019-12-08 08:50:45
【问题描述】:

Express.js 不会在路径 URL 中使用 ?

我该如何解决这个问题?

当我点击提交按钮时,我得到了这个:

http://localhost:1000/register?username=test&password=test123

但是,它与以下内容相同:

http://localhost:1000/register

我已经搜索了很多关于如何解决 URL 路径中 ? 的问题。并且有很多答案。但我只对 Express 和 JavaScript 有一定的了解。所以我需要一个简单的答案

我需要对我的<form></form> 元素做些什么吗?还是我必须修复我使用app.get(); 方法的方式?

快递服务器

app.get('/register?username=:username&password=:password', function(req, res) {
    console.log('/register=?');
});

app.get('/register', function(req, res) {
    console.log('/register);
});

HTML

<!DOCTYPE html>
<html lang="en">
    <body>
        <div class="content">
            <div class="register">
                <h1>Register</h1>
                <form runat="server">
                    <label for="username">Username</label>
                    <input type="text" name="username" />
                    <label for="password">Password</label>
                    <input type="password" name="password" />
                    <input type="submit" value="Submit" />
                </form>
            </div>
        </div>
    </body>
</html>

【问题讨论】:

  • 你必须使用req.query属性
  • ? 不是请求路径的一部分,使用 Express 时,您不能将 ? 放入路由路径。如果你这样做,它永远不会匹配。在 URL 中,? 及其后面的内容称为查询参数。您将路由与路径匹配,然后使用req.query 访问查询参数并采取相应措施。如果您尝试根据查询参数创建不同的路由处理程序,那么您可能设计错误,因为现在通常设计 URL 或路由处理程序。在您的路由处理程序中,您可以使用基于查询参数的代码进行分支。

标签: javascript html forms express form-submit


【解决方案1】:

您可以通过req.query属性访问查询字符串参数,例如:

app.get('/register', function(req, res) {
    console.log(req.query); // { username : 'test', password: 'test123' }
    console.log('/register);
});

来自文档:

此属性是一个对象,其中包含路由中每个查询字符串参数的属性。如果没有查询字符串,则为空对象{}

见:https://expressjs.com/en/api.html#req.query

您还可以删除服务器端代码中的第一个处理程序,您似乎也尝试使用req.params

req.params 可以像这样在路由处理程序中使用:

api/:api_version/songs 

那么你的 URL 可能是这样的:

api/v1/songs?artist=abba
// req.params.api_version is ‘v1’  
// req.query.artist is ‘abba’ 

见:https://expressjs.com/en/api.html#req.params

【讨论】:

    猜你喜欢
    • 2016-07-09
    • 2015-08-26
    • 2017-07-08
    • 2014-08-12
    • 2011-04-10
    • 1970-01-01
    • 2016-09-06
    • 1970-01-01
    • 2021-07-19
    相关资源
    最近更新 更多