javascript - Express Server 似乎给 200 然后根据 post 请求给 404

标签 javascript jquery node.js

我正在自学 NodeJS 来创建一个应用程序,我遇到了 Express 的问题,服务器似乎在发布请求时返回 200 代码,但由于某种原因立即变成 404。

在我在客户端和服务器之间添加一个 jquery 方法以首先进行一些前端验证之前,请求已得到妥善处理。以前,我只是
将“action='/login'”作为表单标记的属性包含在内并且有效。

我正在使用 express 生成器

这是表单信息的样子(在 Jade 中):

form(name="logins" id="loginfo" role="form" method="post")

它由 welcome-screen.js 中的这个函数处理,位于我在 app.js 中指定的静态目录中

$(document).ready(function() {
    $("#loginfo").submit(function(event, done) {
        checkEmail();
    });
});

function checkEmail() {
    var email = document.forms["logins"]["usrname"].value;
    console.log(email);
    if (email.length != 0) {
        getLogin(email);
    }
}

function getLogin(email) {
    $.post("/login", {"usrname" : email});
}

这是处理“/login”上的发布请求的服务器代码。控制台显示打印语句,所以我知道请求正在发送到服务器并且可以找到“/login”。

var express = require('express');
var router = express.Router();
....
router.post("/login", function(req, res) {
    console.log(req.body["usrname"]);
    var user = req.body["usrname"];
    res.render("login", {title : "Hello!",
                    username : user});
    console.log("Passed rendering");
});

但是,我被重定向到默认错误页面并出现 404 错误。

这是我得到的堆栈跟踪,如果它对任何人有帮助的话。

Error: Not Found
    at D:\projects\neg5\app.js:30:13
    at Layer.handle [as handle_request]      (D:\projects\neg5\node_modules\express\lib\router\layer.js:95:5)
at trim_prefix (D:\projects\neg5\node_modules\express\lib\router\index.js:312:13)
at D:\projects\neg5\node_modules\express\lib\router\index.js:280:7
at Function.process_params (D:\projects\neg5\node_modules\express\lib\router\index.js:330:12)
at next (D:\projects\neg5\node_modules\express\lib\router\index.js:271:10)
at D:\projects\neg5\node_modules\express\lib\router\index.js:618:15
at next (D:\projects\neg5\node_modules\express\lib\router\index.js:256:14)
at Function.handle (D:\projects\neg5\node_modules\express\lib\router\index.js:176:3)
at router (D:\projects\neg5\node_modules\express\lib\router\index.js:46:12)

在我发送 post 请求后,控制台打印出包含在 express 生成器中的这两行,所以我知道正在找到“/login”。

POST /login 200 34.463 ms - 598
POST / 404 25.479 ms - 1398

我一直在绞尽脑汁想弄清楚为什么这不起作用。任何帮助将不胜感激!

最佳答案

您需要将 action="/login" 添加到您的登录表单(在 views/index.jade 中),如下所示:

form(name="logins" id="loginfo" action="/login" role="form" method="post")
    // rest of view omitted 

关于javascript - Express Server 似乎给 200 然后根据 post 请求给 404,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33621654/

相关文章:

php - 在窗口关闭时提交表单?

javascript - 单击表行时更新子元素类

javascript - 如何增加这种弹性动画效果的振幅?

node.js - Apollo 查询缓存中的数据错误

javascript - 环回操作钩子(Hook)未触发

javascript - 如何在调整大小时运行一次脚本?

javascript - 在 nintex 表单中使用 javascript 验证电子邮件地址、电话、身份证号码

java - Mozilla Rhino 能否检测并报告是否正在调用已弃用的 Java 方法?

node.js - 如果错过了 Node 调度运行作业

javascript - 验证码成功后执行JQuery替换div内容