我正在开发一个NodeJs应用程序,该应用程序从FB接收一个事件并将其放入本地数据库。对于api查询首页中的每个事件,除最后一个事件外,一切正常。
我收到以下错误:
[2016年12月1日,下午1:48:39]
TypeError:无法读取IncomingMessage上未定义的属性“名称”。(/home/node/virgo/app.js:217:32)在IncomingMessage.emit(events.js:129:20)在_stream_read.js:907:16在process._tickCallback(node.js:372:11)
刚过
console.log(resultBody);
码:
function addFBEvent(facebookId){
console.log("getting event: " + facebookId);
var options = {
hostname: 'graph.facebook.com',
port: 443,
path: '/v2.8/'+facebookId+'?fields=name,description,start_time,end_time,place,photos{images}&access_token={INSERT API ACCESS CODE HERE}',
method: 'GET'
};
https.request(options, function(res2) {
var resultBody = "";
res2.setEncoding('utf8');
res2.on('data', function (chunk) {
resultBody = resultBody + chunk;
});
res2.on('end', function () {
dbConnection = sql.createConnection({
host : settings.dbHost,
user : settings.dbUser,
password : settings.dbPassword
});
dbConnection.connect(function(err){
if(!err) {
console.log("Database is connected ... nn");
} else {
console.log("Error connecting database ... nn");
}
});
var json = JSON.parse(resultBody);
console.log(resultBody);
if (json != undefined){
var eventName = json.name;
var eventStart = json.start_time;
var eventEnd = json.end_time;
var eventDescription = json.description;
var eventPlace = json.place.name;
var eventPoster = json.photos.data[json.photos.data.length-1].images[0].source;
var eventId = json.id;
console.log("name: " + eventName + ", start: " + eventStart + ", end: " + eventEnd + ", place: " + eventPlace + ", Poster: " + eventPoster);
//console.log("Description: " + eventDescription);
dbConnection.query('INSERT INTO SVVirgo.activities(title, description, image, start, end, price, location, facebook) VALUES ("'+eventName+'","'+eventDescription+'","'+eventPoster+'","'+eventStart+'","'+eventEnd+'",0,"'+eventPlace+'","'+eventId+'")', function (err, result){
});
}
dbConnection.end();
})
}).end();
}
有关中断事件,请参见graph api资源管理器:Graph
API
场次编码:1682486658666506
我试过没有运气地捕获未定义的json对象,我也尝试使用此解决方案来验证json:Stackoverflow验证JSON
javascript
而不是https.request
尝试使用request
。
它将为您提供解析的JSON,而您无需手动进行。
如果您希望像手动操作那样手动操作,请记住将其包装var json = JSON.parse(resultBody);
在try /
catch块中(或使用tryjson
),因为JSON.parse
不能在try
/ catch之外的未知数据上使用-可能引发异常。
另外,不要在路由处理程序中打开数据库连接。您应该打开一次连接,然后在处理程序中使用它。。
现在要连接到数据库,但你继续连接回调外,让您从开始的所有行var json = JSON.parse(resultBody);
之前
建立的数据库连接。
此外,错误可能不是因为json
未定义而是因为json.place
未定义。
您可以更改此:
var eventPlace = json.place.name;
对此:
var eventPlace = json.place && json.place.name;
您还必须json.photos
在访问之前检查json.photos.data
并测试是否json.photos.data
为数组,然后再将其视为此类(可以使用以下方法进行处理:
if (json.photos && Array.isArray(json.photos.data)) {
// ...
}
基本上,您需要在访问它们之前确保值是您想要的值。例如访问此:
json.photos.data[json.photos.data.length-1].images[0].source
当json
未定义,何时json.photos
未定义,何时json.photos.data
未定义,何时json.photos.data
不是数组,何时json.photos.data.length
为零,何时json.photos.data[json.photos.data.length-1]
未定义,何时json.photos.data[json.photos.data.length-1].images
未定义,何时json.photos.data[json.photos.data.length-1].images
不是数组,何时json.photos.data[json.photos.data.length-1].images
为数组但为空或何时json.photos.data[json.photos.data.length-1].images
为a
时,可能失败非空数组,但json.photos.data[json.photos.data.length-1].images[0].source
未定义。
如您所见,这里有很多假设。如果不满足这些假设,则代码将失败。
问题内容: 从节点手册中,我可以使用来获得文件的目录,但是从REPL中,这似乎是未定义的。这是我的误解还是错误在哪里? 问题答案: 仅在脚本中定义。在REPL中不可用。 尝试制作脚本 并运行它: 您将看到打印。 添加了背景说明:表示“此脚本的目录”。在REPL中,您没有脚本。因此,将没有任何实际意义。
我试图定义一些endpoint,并使用进行测试。在中,我有: 但是当我运行时,我会得到以下错误: 我如何解决这个问题?
我收到此意外错误nodejs(Express)。每当我需要控制台时。文件或请求。文件,未定义为控制台 三个文件如下: 用于注册 处理所有multer配置 所有文件的父级
tran.js 错误 (节点:12012)未处理的PromisejectionWarning:未处理的promise拒绝(拒绝id:1):TypeError:无法读取未定义(节点:12012)[DEP0018]弃用警告:未处理的promise拒绝被弃用。将来,未处理的promise拒绝将终止节点。具有非零退出代码的js进程。 我不知道该怎么办
下午好,我是新反应和Node.js和我有一个问题。 我在一个网页上有一个表格,你将在那里收到旅行的数据。travel_order模型中存在这些列(Id locales、name、date、time),但是“lockations name”列旨在使用Id列出这些地方的名称。此位置的ID在“地点ID”列中列出。但是,在列出时,它给我一个错误:“TypeError:不能读取未定义的属性'Designac
我试着学习节点。js(ES6)但在 这是我的结构: BaseModel.js 会计模型。js 主要的js 现在我运行: 和获取错误: ReferenceError:对象上未定义BaseModel。(/Users/tamirscherzer/POC/projects/NodeJS/tutorials/classes/AccountModel.js:5:28)在模块中_在对象处编译(module.js