Подтвердить что ты не робот

POSTing json для выражения с помощью jQuery

У меня возникла проблема при отправке данных JSON от моего клиента на сервер node, на котором выполняется экспресс.

Вот простой сервер, демонстрирующий мою проблему:

var express = require('express');

var app = express();

app.configure(function(){   
    app.use(express.bodyParser());
    app.use(app.router);
    app.use(express.logger());
});

app.listen(80);

app.post('/', function(req,res){
    console.log(req.body);
    console.log(req.body.number + 1);
});

Этот сервер просто регистрирует все данные POST на консоли.

Если я затем вставлю следующее в консоль разработки Chrome: $.post('/', {number:1});

Сервер распечатывает:

{ number: '1' }
11

Как я могу остановить число, которое я передаю, интерпретируется как строка? Это как-то связано с промежуточным программным обеспечением bodyParser, которое я использую?

Любая помощь приветствуется!!

4b9b3361

Ответ 1

$.post отправляет url-закодированные данные, поэтому то, что действительно отправлено, это number=1, которое затем анализируется, а также может быть промежуточным программным обеспечением bodyParser.

Чтобы отправить json, вы должны использовать JSON.stringify({number:1}).

Используя $.post, к сожалению, не будет установлен соответствующий заголовок Content-Type (экспресс все равно будет обрабатывать его), поэтому лучше использовать:

$.ajax({
    url: '/', 
    type: 'POST', 
    contentType: 'application/json', 
    data: JSON.stringify({number:1})}
)