2013-12-07 2 views
1

Front EndNodejs JSON строка показывает, как [объект Object]

// js/jquery 
var content = { 
    info : 'this is info', 
    extra : 'more info' 
} 
$.ajax({ 
    type: 'POST', 
    url: '/tosave', 
    data: content 
}); 

Сев.Узел

// app.js 
app.post('/tosave', function(req, res){ 
    fs.writeFile('/saved.txt', req.body, function(err, data){}) 
}); 

Это экономит в файл в [object Object]. Я получаю тот же результат, когда я использую JSON.stringify() на контенте перед отправкой его через запрос ajax. Однако, если я строкую его в node.js, он успешно сохраняет как {"info":"this is the info","extra":"this is extra"}.

Вопрос: почему это происходит? Кроме того, как я мог бы преобразовать его в строку json перед запросом ajax?

+0

Разумеется, правильный синтаксис 'writeFile' в вашем примере будет выглядеть следующим образом:' fs.writeFile ('/ saved.txt', data, function (err) {}) ' – Coder

+0

Да, я только что редактировал мой пример, что wasn 't проблема –

+0

Ну, строковое представление объекта по умолчанию - '[object Object]'. –

ответ

0

Кажется, что оба jquery и node очень полезны здесь.

JQuery распознает, что вы отправляете объект и автоматически преобразуете его в формат, который может быть отправлен до его отправки.

Узел распознает то, что вы отправляете, и декодирует его, когда он получает его, превращая его обратно в объект.

В основном это означает, что вам не нужно беспокоиться о транспорте.

Что не нравится в этом?

+1

Это технически неверно; jQuery отправляет объект как данные POST, а не JSON. Затем узел преобразует полученные POST-данные в объект. – JJJ

+0

Исправлен ответ –

0

Если вы действительно хотите отправить текст (например, это похоже на правильный JSON, но это не так), и не хотите, чтобы Node видел его как JSON и преобразовывал его в объект для вас, вы можете попробовать задающий:

$.ajax({ 
    type: 'POST', 
    url: '/tosave', 
    data: content, 
    processData: false 
}); 

Это приведет к тому, что данные, которые будут отправлены с application/x-www-form-urlencoded которые, возможно, предотвратить узел от услужливо превращения данных в объект JSON.

Однако я бы порекомендовал просто нарисовать req.body перед тем, как записать его в файл. writeFile не делает этого для вас, потому что вы можете отправить буфер вместо строки, я полагаю.

Смежные вопросы