Node.js undefined:1 [SyntaxError: Unexpected end of input]
Node.js undefined:1 [SyntaxError: Unexpected end of input]
我在执行 node.js 脚本时遇到以下错误,我尝试通过添加 console.log() 来跟踪错误来进行大量调查,但找不到任何解决方案。 [注意:我还搜索了其他 Whosebug 解决方案,但 none 有帮助]
undefined:1
{"ydht":{"status":{"code":200,"message":"OK"},"records":[
^
SyntaxError: Unexpected end of input
at Object.parse (native)
at IncomingMessage.<anonymous> (/tmp/subs_20140130/inc/getData.js:36:24)
at IncomingMessage.EventEmitter.emit (events.js:95:17)
at IncomingMessage.<anonymous> (_stream_readable.js:745:14)
at IncomingMessage.EventEmitter.emit (events.js:92:17)
at emitReadable_ (_stream_readable.js:407:10)
at emitReadable (_stream_readable.js:403:5)
at readableAddChunk (_stream_readable.js:165:9)
at IncomingMessage.Readable.push (_stream_readable.js:127:10)
at HTTPParser.parserOnBody [as onBody] (http.js:142:22)
这是我的代码:
var options = {
host: '<my host>',
port: 3128,
path: 'http://<some host>:4080'+searchQuery,
method: 'GET',
headers: {
'App-Auth': cert
}
};
var req = http.request(options, function(res) {
res.setEncoding('utf8'); //DEBUG
for ( var k in options) { console.log("[LOGGING] options :" + k + " = " + options[k]);} //DEBUG
res.on('data', function (resData) {
var resObj = "";
resObj = JSON.parse(resData);
console.log("[LOGGING] Response:: "+resObj);
if(resObj.ydht.status.code === 200 && resObj.ydht.records[0].key.length > 0) {
console.log("[LOGGING] Email "+em+" Key "+resObj.ydht.records[0].key);
var filePath = basePath + '/setData';
var setd = require(filePath);
setd.setMagData(resObj.ydht.records[0].key, ycacert, is_sub);
} else {
console.log("[LOGGING] Fail to fetch data em "+em+" nl "+nl);
}
});
res.on('end', function() {
console.log("[LOGGING] connection closed");
});
});
req.on('error', function(err) {
console.log("[LOGGING] Fail to fetch data em "+em+" nl "+nl);
});
req.end();
当我使用 curl 命令调用 api 时,我得到以下有效的 json 响应:
{"ydht":{"status":{"code":200,"message":"OK"},"records":[{"metadata":{"seq_id":"intusnw1-14B3579A577-3","modtime":1422531339,"disk_size":99},"key":"201408271148_zy@gmail.com","fields":{"em":{"value":"xyz1408@yahoo.in"},"is_confirm":{"value":""},"nl":{"value":"offerpop1"}}}],"continuation":{"scan_completed":false,"scan_status":200,"uri_path":"/YDHTWebService/V1/ordered_scan/dts.subs_email?order=asc&start_key=a0"}}}
data
回调被多次调用,带有响应块。在每个回调中,您需要将响应附加到一个字符串,然后在 end
上,这就是您解析它的时候。
var req = http.request(options, function(res) {
res.setEncoding('utf8');
var body = "";
res.on('data', function(resData) {
body += resData;
});
res.on('end', function() {
var json = JSON.parse(body);
if (json.ydht.status.code === 200 && json.ydht.records[0].key.length > 0) {
var filePath = basePath + '/setData';
var setd = require(filePath);
setd.setMagData(json.ydht.records[0].key, ycacert, is_sub);
} else {
console.log("[LOGGING] Fail to fetch data em " + em + " nl " + nl);
}
});
});
首先感谢Ben正确的根本原因分析。我尝试了 Ben 提出的解决方案,但由于我的响应数据非常庞大,它开始给我 "socket hang up" 错误。所以我必须使用 node.js 请求模块
重新设计解决方案
//Load the request module ( Dont forget to include it in package.json dependency "request": "2.x.x")
var request = require('request');
request('http://xys.com/api', function (error, response, body) {
//Check for error
if(error){
return console.log('Error:', error);
}
//Check for right status code
if(response.statusCode !== 200){
return console.log('Invalid Status Code Returned:', response.statusCode);
}
console.log(body); // Here is the response body
});
当我收到此错误时:
undefined:1
[
因为.json文件保存为:
8 位 unicode BOM,Win (CRLF)
代替:
8 位 unicode,Win (CRLF)
对我来说应该是后者!
迟到
我在执行 node.js 脚本时遇到以下错误,我尝试通过添加 console.log() 来跟踪错误来进行大量调查,但找不到任何解决方案。 [注意:我还搜索了其他 Whosebug 解决方案,但 none 有帮助]
undefined:1
{"ydht":{"status":{"code":200,"message":"OK"},"records":[
^
SyntaxError: Unexpected end of input
at Object.parse (native)
at IncomingMessage.<anonymous> (/tmp/subs_20140130/inc/getData.js:36:24)
at IncomingMessage.EventEmitter.emit (events.js:95:17)
at IncomingMessage.<anonymous> (_stream_readable.js:745:14)
at IncomingMessage.EventEmitter.emit (events.js:92:17)
at emitReadable_ (_stream_readable.js:407:10)
at emitReadable (_stream_readable.js:403:5)
at readableAddChunk (_stream_readable.js:165:9)
at IncomingMessage.Readable.push (_stream_readable.js:127:10)
at HTTPParser.parserOnBody [as onBody] (http.js:142:22)
这是我的代码:
var options = {
host: '<my host>',
port: 3128,
path: 'http://<some host>:4080'+searchQuery,
method: 'GET',
headers: {
'App-Auth': cert
}
};
var req = http.request(options, function(res) {
res.setEncoding('utf8'); //DEBUG
for ( var k in options) { console.log("[LOGGING] options :" + k + " = " + options[k]);} //DEBUG
res.on('data', function (resData) {
var resObj = "";
resObj = JSON.parse(resData);
console.log("[LOGGING] Response:: "+resObj);
if(resObj.ydht.status.code === 200 && resObj.ydht.records[0].key.length > 0) {
console.log("[LOGGING] Email "+em+" Key "+resObj.ydht.records[0].key);
var filePath = basePath + '/setData';
var setd = require(filePath);
setd.setMagData(resObj.ydht.records[0].key, ycacert, is_sub);
} else {
console.log("[LOGGING] Fail to fetch data em "+em+" nl "+nl);
}
});
res.on('end', function() {
console.log("[LOGGING] connection closed");
});
});
req.on('error', function(err) {
console.log("[LOGGING] Fail to fetch data em "+em+" nl "+nl);
});
req.end();
当我使用 curl 命令调用 api 时,我得到以下有效的 json 响应:
{"ydht":{"status":{"code":200,"message":"OK"},"records":[{"metadata":{"seq_id":"intusnw1-14B3579A577-3","modtime":1422531339,"disk_size":99},"key":"201408271148_zy@gmail.com","fields":{"em":{"value":"xyz1408@yahoo.in"},"is_confirm":{"value":""},"nl":{"value":"offerpop1"}}}],"continuation":{"scan_completed":false,"scan_status":200,"uri_path":"/YDHTWebService/V1/ordered_scan/dts.subs_email?order=asc&start_key=a0"}}}
data
回调被多次调用,带有响应块。在每个回调中,您需要将响应附加到一个字符串,然后在 end
上,这就是您解析它的时候。
var req = http.request(options, function(res) {
res.setEncoding('utf8');
var body = "";
res.on('data', function(resData) {
body += resData;
});
res.on('end', function() {
var json = JSON.parse(body);
if (json.ydht.status.code === 200 && json.ydht.records[0].key.length > 0) {
var filePath = basePath + '/setData';
var setd = require(filePath);
setd.setMagData(json.ydht.records[0].key, ycacert, is_sub);
} else {
console.log("[LOGGING] Fail to fetch data em " + em + " nl " + nl);
}
});
});
首先感谢Ben正确的根本原因分析。我尝试了 Ben 提出的解决方案,但由于我的响应数据非常庞大,它开始给我 "socket hang up" 错误。所以我必须使用 node.js 请求模块
重新设计解决方案//Load the request module ( Dont forget to include it in package.json dependency "request": "2.x.x")
var request = require('request');
request('http://xys.com/api', function (error, response, body) {
//Check for error
if(error){
return console.log('Error:', error);
}
//Check for right status code
if(response.statusCode !== 200){
return console.log('Invalid Status Code Returned:', response.statusCode);
}
console.log(body); // Here is the response body
});
当我收到此错误时:
undefined:1
[
因为.json文件保存为:
8 位 unicode BOM,Win (CRLF) 代替: 8 位 unicode,Win (CRLF)
对我来说应该是后者!
迟到