【问题标题】:Server unable to find view for POSTbut can find it in GET服务器无法找到 POST 的视图,但可以在 GET 中找到它
【发布时间】:2018-09-23 09:45:28
【问题描述】:

我有一些代码应该验证用户登录到我的服务器,但它不想发布它。我的 get 请求加载与我的帖子完全相同的“/login”没有问题,但由于某种原因,它不想在 POST 期间加载它。抱歉,如果我的代码效率低下且难以阅读,我仍在尝试掌握 javascript。

app.post("/login", (req, res) => {
    req.body.userAgent = req.get('User-Agent');
    dataServiceAuth.checkUser(req.body).then((user) => {
        req.session.user = {
            userName: user.username,
            email: user.email,
            loginHistory: user.loginHistory
        }
        res.redirect('/employees');
    }).catch((err) => {
        res.render("login", {errorMessage: err, userName: req.body.userName});
    });
});

和 POST 中的函数

module.exports.checkUser = function (userData) {
    return new Promise(function (resolve, reject) {
        User.find({ user: userData.userName }).exec().then((user) => {
            if (user == undefined || user.length == 0) {
                reject("Unable to find user: " + userData.userName);
            }
            else if (user[0].password != userData.password) {
                reject("Incorrect Password for user: " + userData.userName);
            }
            else if (user[0].password == userData.password) {
                users[0].loginHistory.push({dateTime: (new Date()).toString(), userAgent: userData.userAgent});
                user[0].update({userName: userData.userName}, {$set: {loginHistory: user[0].loginHistory}}.exec().then((user) => {
                    resolve(user[0]);
                }).catch((err) => {
                    reject("There was an error verifying the user: ${err}");
                }))
            }
        }).catch((err) => {
            reject("Unable to find user: " + userData.user);
        });
    });
}; 

我的Tree 看起来像这样 我的 Handlebars 文件看起来像这样

<!DOCTYPE html>
<html lang="en">
  <body>
    <div class="container">
      <div class="row">
    <div class="col-md-12">

        <h2>Log In</h2>
        <hr />


        {{#if errorMessage}}
            <div class="alert alertdanger">
                <strong>Error:</strong> {{errorMessage}}</div>
        {{/if}}
        <form method="post" action="/login">
            <div class="row">
                <div class="col-md-12">
                    <div class="form-group">
                        <input class="form-control" id="userName" name="userName" type="text" placeholder="User Name" required value=""
                        />
                    </div>
                </div>
            </div>
            <div class="row">
                <div class="col-md-12">
                    <div class="form-group">
                        <input class="form-control" id="password" name="password" type="password" placeholder="Password" required />
                    </div>
                </div>
            </div>
            <input type="submit" class="btn btn-success pull-right" value="Login" />
        </form>
    </div>
</div>
    </div>

   </body>
</html>

【问题讨论】:

    标签: javascript html node.js handlebars.js


    【解决方案1】:

    首先,您应该意识到通过 GET 和 POST 方法请求相同的路由会做不同的事情。

    当您使用 GET 方法时,加载页面没有问题的原因是(据我假设)您会指定在收到请求时呈现特定文件(可能是此登录表单)。

    但是,如果是 POST 请求,您正在对随请求发送的表单数据执行操作,因此可能有多种原因导致您遇到问题。正如 Yaswant 的回答所述,您可能还没有配置 bodyParser 来解析嵌套对象。或者您的代码中可能存在其他问题。

    如果您能提供更多关于您所面临的错误的详细信息,以及您能否发布完整的 app.js 文件,将会很有帮助。

    【讨论】:

    • 我最初在安装正文解析器时忘记包含--save,所以在我切换计算机后我没有正文解析器。
    【解决方案2】:

    Express 版本 4 及更高版本需要额外的中间件层来处理 POST 请求。这个中间件被称为“bodyParser”。这曾经是 Express 框架的内部部分,但在这里我认为您需要像这样单独安装它 npm install --save body-parser

    【讨论】:

    • 谢谢,我上次安装时不小心忘记了包含 --save 并从笔记本电脑切换到台式机来处理它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-29
    • 2021-07-02
    相关资源
    最近更新 更多