我开始使用Node并且正在使用API。我试图采用一个String变量来代替JSON参数。
让我从代码开始,因为它会更有意义
var http = require('http');
var fs = require('fs');
// An object of options to indicate where to post to
var post_options = {
host: 'localhost',
port: '8080',
path: '/api/scan',
method: 'POST',
headers: {
'Content-Type': 'application/json'
}
};
// Set up the request
var post_req = http.request(post_options, function(res) {
res.setEncoding('utf8');
var body = '';
res.on('data', function (chunk) {
body += chunk;
});
res.on('end', function () {
body = JSON.parse(body)
// Make sure it's working
console.log(body.response.subject);
});
});
// post the data
var url = 'ssl.com';
post_req.write('{"url": ' + url + ', "path":"/", "port":"443", "live_scan":"false", "advanced":"true"}');
post_req.end();
如果查看最后三行,我试图将一个url设置为字符串var url
,然后将其插入到JSON中。
这是我得到的错误:
$ node example.js
undefined:1
SyntaxError: Unexpected token s<br> at Object.parse (native)<br> at parse (C:\projects\ssl-scanner\node_modules\body-parser\lib\types\json.js:88:17)<br> at C:\projects\ssl-scanner\node_modules\body-parser\lib\read.js:116:18<br> at invokeCallback (C:\projects\ssl-scanner\node_modules\body-parser\node_modules\raw-body\index.js:262:16)<br> at done (C:\projects\ssl-scanner\node_modules\body-parser\node_modules\raw-body\index.js:251:7)<br> at IncomingMessage.onEnd (C:\projects\ssl-scanner\node_modules\body-parser\node_modules\raw-body\index.js:308:7)<br> at emitNone (events.js:80:13)<br> at IncomingMessage.emit (events.js:179:7)<br> at endReadableNT (_stream_readable.js:913:12)<br> at _combinedTickCallback (node.js:377:13)
^
SyntaxError: Unexpected token S
at Object.parse (native)
at IncomingMessage.<anonymous> (C:\projects\node\example.js:23:21)
at emitNone (events.js:85:20)
at IncomingMessage.emit (events.js:179:7)
at endReadableNT (_stream_readable.js:913:12)
at _combinedTickCallback (node.js:377:13)
at process._tickCallback (node.js:401:11)
现在我这样做的原因是因为我想最终遍历一个包含URL列表的文本文件(每行一个,因为分隔符是新行)并设置{{1} }等于列表中的每个网址,然后发送请求。
欢迎任何想法和建议
-Hamza
答案 0 :(得分:1)
很可能你没有从API获得JSON响应,而是HTML代码;可能的问题可能是您没有在请求中传递正确的JSON字符串。
使用JSON.stringify
:
var data = {
'url': url,
'path': '/',
'port': 443,
'live_scan': false,
'advanced': true
};
post_req.write( JSON.stringify(data) );
此外,在尝试Content-Type
之前,请检查您获得的响应中JSON.parse
标头的设置。
答案 1 :(得分:0)
如果你看一下错误给你的回溯,问题是第23行。
在IncomingMessage上。的(C:\项目\节点\ example.js:23:21)强>
该行是:
body = JSON.parse(body)
我假设您打开的内容实际上不是JSON,所以当您尝试对其执行JSON.parse时,它会失败。看到错误也如何说:
Unexpected token s<br>
我们可以非常自信你的身体不是JSON。
尝试记录身体,看看它是什么。