2013-10-15 16 views
10

Mã của tôi đang cố đăng dữ liệu lên Coldfusion API từ máy chủ Node.js cục bộ của tôi. Tôi đã quản lý để giao tiếp với API và tự xác thực thông qua các tiêu đề yêu cầu. Tuy nhiên, tôi gặp khó khăn khi thực sự truyền đối tượng JSON của mình thông qua vì tôi không thể có được cấu trúc đúng.Đăng các đối tượng lồng nhau trong chuỗi truy vấn - Node.js

API không chấp nhận tùy chọn JSON của mô-đun yêu cầu, do đó, đó là tùy chọn đơn giản nhất của tôi ngoài cửa sổ.

API dự kiến ​​như sau:

{ 
    'source': { 
     'customer': { 
      'customerlogin': 'myusername', 
      'customerpassword': 'mypassword', 
     } 
    } 
} 

mã của tôi hoạt động nếu tôi cứng mã thông số cơ thể sau (từ một bài thành công của người khác) vào bài viết của tôi.

var Jrequest = require('request'); 

var options = { 
    uri: 'http://myAPI/customerSSO.json', 
    headers: {'Content-Type': 'application/x-www-form-urlencoded', 'Authorization': something', 'Timestamp': timestamp}, 
    method: 'POST', 
    body: 'source=%7B%0D%0A++%22customer%22%3A+%7B%0D%0A++++%22customerlogin%22%3A+%22myusername%22%2C%0D%0A++++%22customerpassword%22%3A+%22mypassword%22%2C%0D%0A%09%22success%22%3A+%22%22%0D%0A++%7D%0D%0A%7D' // Working 
}; 


Jrequest(options, function (error, response, body){ 
    res.send(body); 
}); 

Nếu tôi gửi JSON thông qua các cách khác, ví dụ: json.stringify(), từ chối nguồn là bắt buộc nhưng không được xác định '.

Vì vậy, tôi cho rằng câu hỏi của tôi là, trong Node.js làm thế nào để tôi bật JSON vào cái gì đó trông như thế này

'source=%7B%0D%0A++%22customer%22%3A+%7B%0D%0A++++%22customerlogin%22%3A+%22myusername%22%2C%0D%0A++++%22customerpassword%22%3A+%22mypassword%22%2C%0D%0A%09%22success%22%3A+%22%22%0D%0A++%7D%0D%0A%7D' 

hoặc tôi đã bỏ qua tùy chọn khác?

Cảm ơn bạn đã được trợ giúp và xin lỗi nếu tôi đã sử dụng thuật ngữ không chính xác.

Trả lời

4

Tôi nghĩ rằng điều này sẽ làm việc:

var querystring = require('querystring'); 
... 
request({ 
    ... 
    headers : { 'Content-Type': 'application/x-www-form-urlencoded', ... }, 
    body : 'source=' + querystring.escape(JSON.stringify({ 
    'customer': { 
     'customerlogin': 'myusername', 
     'customerpassword': 'mypassword', 
    } 
    })), 
    ... 
}, ...) 

dụ của bạn cũng chứa dòng mới và dấu xuống dòng và như vậy, nhưng tôi giả định đó là những tùy chọn.

+0

Điều đó hoàn hảo, cảm ơn bạn rất nhiều. – Longshot

+1

Một tùy chọn khác là sử dụng 'encodeURIComponent' thay cho mô-đun' querystring' .. không chắc chắn nếu có ưu và khuyết điểm nào - có lẽ chỉ tương đương. Ah, chỉ .toStringed phương thức querystring và nhận 'function (str) {return encodeURIComponent (str); } '- không có sự khác biệt sau đó :) – Pebbl

+1

@pebbl duh, thậm chí không nghĩ về điều đó :) nên làm việc tốt tôi nghĩ. – robertklep

Các vấn đề liên quan