Javascript ExpressJS似乎无法处理ajax调用
我试图找出Node.js作为api来执行GET、POST等操作。我一直在试图找出这篇文章不起作用的原因 我的ajax调用:Javascript ExpressJS似乎无法处理ajax调用,javascript,json,node.js,ajax,express,Javascript,Json,Node.js,Ajax,Express,我试图找出Node.js作为api来执行GET、POST等操作。我一直在试图找出这篇文章不起作用的原因 我的ajax调用: $.ajax({ method: "POST", contentType: 'application/json', dataType: 'json', url: "localhost:8000/login", data: JSON.stringify({user:"john", pass:
$.ajax({
method: "POST",
contentType: 'application/json',
dataType: 'json',
url: "localhost:8000/login",
data: JSON.stringify({user:"john", pass:"123"}),
error: function () {
alert('error');
},
success: function (data) {
alert('success');
}
});
在我的发言中:
var express = require('express');
var app = express();
var bodyParser = require('body-parser');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.post('/login', function (req, res) {
var user = req.body.user;
var password = req.body.pass;
if(user == 'john' && password == '123') {
res.status(200);
} else {
res.status(401);
}
});
app.listen(8000, function () {
console.log('Example app listening on port 8000!');
});
非常感谢您的帮助 您应该从express代码返回一些响应,并且响应应该结束,特别是在只发送状态代码的情况下,如
res.status(401)代码>
这是我的工作:
$.ajax({
type: "POST",
contentType: 'application/json',
dataType: 'json',
url: "/login",
data: JSON.stringify({user:"john", pass:"123"}),
error: function (err) {
console.log(err);
alert('error');
},
success: function (data) {
alert('success');
}
});
app.post('/login', function (req, res, next) {
var user = req.body.user;
var password = req.body.pass;
if(user == 'john' && password == '123') {
res.status(200).json({s: 1});
} else {
res.status(401).json({e: 2});
}
});
我认为您必须将请求解析为JSON。
您的代码是:-
var json = JSON.stringify({user:"john", pass:"123"});
$.ajax({
dataType: 'json',
type: "POST",
url: "/login",
data: json
}).done(function(data){
console.log("works fine");
});
在服务器端
app.post('/login',函数(req,res){
//将数据解析为JSON以供进一步使用
var dataObj=JSON.parse(req.body.data);
if(dataObj.user=='john'&&dataObj.password=='123'){
物质状态(200);
}否则{
物质状态(401);
}
});
var json = JSON.stringify({user:"john", pass:"123"});
$.ajax({
dataType: 'json',
type: "POST",
url: "/login",
data: json
}).done(function(data){
console.log("works fine");
});
应适用于Ajax post函数,将数据发送到节点服务器。
url需要与节点服务器文件中app.post的url匹配,前面不需要localhost。
ContentType也是不必要的,我在Ajax调用外部创建了json对象,而不是在Ajax调用内部设置它
var express = require('express');
var parser = require('body-parser');
var app = express();
var port = 8000;
app.use(parser.urlencoded({extended: false}));
app.use(parser.json());
app.use(express.static('public'));
app.post('/login', function (req, res) {
var user = req.body.user;
var password = req.body.pass;
if(user == "john" && password == "123") {
res.status(200);
} else {
res.status(401);
}
});
var server = app.listen(port, function () {
var host = server.address().address
var port = server.address().port
console.log("App listening at http://%s:%s", host, port);
});
这应该适用于节点服务器本身。
我将服务器设置为运行,这样您就可以随时跟踪它正在侦听的端口,这样您就不必费心向下滚动来更改端口,只需更改文件顶部的端口即可。
而且,/login
在我看来还不错。
另外,我编辑了app.use语句并添加了一个额外的语句。您收到的错误是什么?我总是收到“错误”警报,这意味着ajax调用未成功。应该是哪个。您的服务器正在运行吗?您的代码前端是否在同一台服务器上运行?您的URL必须是有效的URL,如http://localhost:8000/login
或将采用主机网页的协议、域和端口的有效相对URL/login
localhost:8000/login
两者都不是。如果您查看在Ajax调用中遇到的错误的详细信息,或者查看Chrome调试器中的“网络”选项卡以查看网络上到底发生了什么,您可能会得到一些关于错误原因的非常好的提示。值得指出的是,status()不这样做,但sendStatus()和其他方法会这样做。这没有错,只是不完整。但他确实解释了他的建议和原因。这是一个评论,而不是回答。因为你实际上没有回答这个问题,也没有解释OP做错了什么。您只需断言Ajax调用是有效的。此外,它没有说明另一个答案的作用,即服务器代码也是错误的。@Paul,我很抱歉!您的服务器端逻辑实际上不会完成响应,客户端将超时。使用res.send()函数将数据返回到ajax成功函数
var json = JSON.stringify({user:"john", pass:"123"});
$.ajax({
dataType: 'json',
type: "POST",
url: "/login",
data: json
}).done(function(data){
console.log("works fine");
});
var express = require('express');
var parser = require('body-parser');
var app = express();
var port = 8000;
app.use(parser.urlencoded({extended: false}));
app.use(parser.json());
app.use(express.static('public'));
app.post('/login', function (req, res) {
var user = req.body.user;
var password = req.body.pass;
if(user == "john" && password == "123") {
res.status(200);
} else {
res.status(401);
}
});
var server = app.listen(port, function () {
var host = server.address().address
var port = server.address().port
console.log("App listening at http://%s:%s", host, port);
});