Nodejs和Expressjs发送ajax post请求

时间:2014-01-16 09:57:15

标签: jquery ajax node.js express redis

我在http://localhost:1111/user/create发送帖子数据时遇到问题。我正在使用Expressjs框架和Redis作为我的数据库。主要问题是它没有在我的客户端获取文本框的值,并且在发送post数据后,redis中字段的所有值都是未定义的。我不知道这里有什么问题,但这是我的代码:

server.js

中的

app.post

app.post('/user/create', function(req, res) {

    var user = req.body.user;
    var pass = req.body.pass;
    var name = req.body.name;
    var email = req.body.email;

    return client.hmset('username:' + user, 'password', pass, 'name', name, 'email', email,
            function(err, data) {
                if (!err) {
                    return res.send(data);
                    return console.log(data);
                } else {
                    return console.log(err);
                }
            });
});

这是关于如何发送帖子数据的jquery:

<script type="text/javascript">
            $("#createbutton").submit(function(event) {
                event.preventDefault();
                var data = {};
                data.name = $('#nameinput').val();
                data.email = $('#emailinput').val();
                data.username = $('#usernameinput').val();
                data.password = $('#passwordinput').val();
                JSON.stringify(data);
                console.log(data);

                $.ajax({
                    type: 'POST',
                    url: 'http://localhost:1111/user/create',
                    data: {data},
                    dataType: 'application/json',
                    success: function(data) {
                        console.log('success');
                        console.log(data);
                    }
                });
            });
        </script>

我已经检查过客户端和服务器,但我无法弄清楚错误是什么。先谢谢你们。

2 个答案:

答案 0 :(得分:2)

您的数据变量错误,请将您的js代码更改为以下内容并尝试一次:

<script type="text/javascript">
            $("#createbutton").submit(function(event) {
                event.preventDefault();
                var data = {};
                data.name = $('#nameinput').val();
                data.email = $('#emailinput').val();
                data.user = $('#usernameinput').val();
                data.pass = $('#passwordinput').val();
                $.ajax({
                    type: 'POST',
                    url: 'http://localhost:1111/user/create',
                    data: data,
                    dataType: 'application/json',
                    success: function(data) {
                        console.log('success');
                        console.log(data);
                    }
                });
            });
        </script>

您需要使用bodyParser中间件来访问帖子变量。此中间件获取原始发布数据并将值分配给req.body对象。检查http://expressjs.com/api.html#bodyParser

app.use(express.bodyParser());

答案 1 :(得分:-4)

我不知道expressjs,但您可以尝试更改dataType

dataType: 'application/json'

为:

dataType: 'json'