我正在自学 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/