Javascript ExpressJS似乎无法处理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:

我试图找出Node.js作为api来执行GET、POST等操作。我一直在试图找出这篇文章不起作用的原因

我的ajax调用:

$.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);
});