ExpressJS似乎不适用于ajax调用

时间:2017-04-01 06:16:55

标签: 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:"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!');
});

非常感谢任何帮助。

4 个答案:

答案 0 :(得分:1)

您应该从快速代码中返回一些回复,特别是在仅发送res.status(401);

等状态代码的情况下也应该结束回复
app.post('/login', function (req, res) {
    var user = req.body.user;
    var password = req.body.pass;
    if(user == 'john' && password == '123') {
        res.status(200).json({t:1});
    } else {
        res.status(401);
    }

    res.end();
});

答案 1 :(得分:1)

这项工作对我来说:

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

答案 2 :(得分:0)

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语句并添加了一个额外的。

答案 3 :(得分:-1)

我认为你必须解析对JSON的请求。
你的代码是: -

$.ajax({ 
        method: "POST", 
        contentType: 'application/json',
        dataType: 'json',
        url: "localhost:8000/login", 

        //here you used JSON.stringify and on server side you have to parse it to use 'user' and 'pass' as a key of json

        data: JSON.stringify({user:"john", pass:"123"}),
        error: function () {
            alert('error');
        },
        success: function (data) {  
            alert('success');
        }
    });

$.ajax({ method: "POST", contentType: 'application/json', dataType: 'json', url: "localhost:8000/login", //here you used JSON.stringify and on server side you have to parse it to use 'user' and 'pass' as a key of json data: JSON.stringify({user:"john", pass:"123"}), error: function () { alert('error'); }, success: function (data) { alert('success'); } });

在服务器端

<br>
app.post('/login', function (req, res) {

//parse data to JSON for further use
  var dataObj = JSON.parse(req.body.data);
  if(dataObj.user == 'john' && dataObj.password == '123') {
    res.status(200);
  } else {
    res.status(401);
  }
});