CSV GTFS 填充 dexie.js
CSV GTFS populate with dexie.js
我不确定 Dexie 的最佳实践,从 csv 文本文件创建数据库,我昨天才开始使用它。
我所做的就是创建我的商店
var db = new Dexie('gtfs');
db.version(1).stores({
'calendar' : "++id,service_id,monday,tuesday,wednesday,thursday,friday,saturday,sunday,start_date,end_date",
'calendar_dates': "++id,service_id,date,exception_type",
'stop_times' : "++id,trip_id,arrival_time,departure_time,stop_id,stop_sequence,pickup_type,drop_off_type",
'stops' : "++id,stop_id,stop_code,stop_name,stop_lat,stop_lon,zone_id,stop_url,location_type,parent_station,platform_code,wheelchair_boarding",
'trips' : "++id,route_id,service_id,trip_id,trip_headsign,trip_short_name,direction_id,shape_id,wheelchair_accessible,bikes_allowed"
});
这是目前的样子,对 indexedDB 不是很熟悉,但目前看起来还不错。
现在因为我有一个包含所有 txt 文件的 gtfs 文件夹,我遍历并从 txt 文件中获取数据,然后转换为 JSON。
db.on('ready', function () {
return new Dexie.Promise(function (resolve, reject) {
// var url = gtfs
gtfs.forEach(function (name, index) {
var url = 'gtfs/' + name + '.txt';
$.ajax(url, {
type: 'get',
dataType: 'text',
error: function (xhr, textStatus) {
// Rejecting promise to make db.open() fail.
reject(textStatus);
},
success: function (data) {
// Resolving Promise will launch then() below.
var result = csvJSON(data);
var res = JSON.parse(result);
console.log("Got ajax response. We'll now add the objects.");
// By returning the db.transaction() promise, framework will keep
// waiting for this transaction to commit before resuming other
// db-operations.
resolve(data);
}
});
});
现在可以正常工作了(实际上,它遍历每个 txt 文件,但只解析最后一个文件),我不能像原始示例代码那样将所有内容都保留在 'someTable' 中。因此,如上所示,我创建了我的新商店。不过,我遇到了这个障碍,我必须将 table 硬编码为一种方法。即db.calendar
。
}).then(function (data) {
var result = csvJSON(data);
var res = JSON.parse(result);
console.log("Got ajax response. We'll now add the objects.");
// By returning the db.transaction() promise, framework will keep
// waiting for this transaction to commit before resuming other
// db-operations.
return db.transaction('rw', db.calendar, function () {
res.forEach(function (item) {
console.log("Adding object: " + JSON.stringify(item));
db.calendar.add(item);
})
})
}).then(function () {
console.log("Transaction committed");
});
})
为了保留我的代码 'DRY' 是否至少有一种方法可以在数据库中获取所有已创建的 table 方法,我可以分别添加这些方法。如果是这样,那是否仍然让我处理我为每个 table 创建的关键路径?
在提出这个问题时,这是 dexie 版本:
"dexie": "^1.4.2"
https://github.com/dfahlander/Dexie.js/issues/320#issuecomment-248760222
我不确定 Dexie 的最佳实践,从 csv 文本文件创建数据库,我昨天才开始使用它。
我所做的就是创建我的商店
var db = new Dexie('gtfs');
db.version(1).stores({
'calendar' : "++id,service_id,monday,tuesday,wednesday,thursday,friday,saturday,sunday,start_date,end_date",
'calendar_dates': "++id,service_id,date,exception_type",
'stop_times' : "++id,trip_id,arrival_time,departure_time,stop_id,stop_sequence,pickup_type,drop_off_type",
'stops' : "++id,stop_id,stop_code,stop_name,stop_lat,stop_lon,zone_id,stop_url,location_type,parent_station,platform_code,wheelchair_boarding",
'trips' : "++id,route_id,service_id,trip_id,trip_headsign,trip_short_name,direction_id,shape_id,wheelchair_accessible,bikes_allowed"
});
这是目前的样子,对 indexedDB 不是很熟悉,但目前看起来还不错。
现在因为我有一个包含所有 txt 文件的 gtfs 文件夹,我遍历并从 txt 文件中获取数据,然后转换为 JSON。
db.on('ready', function () {
return new Dexie.Promise(function (resolve, reject) {
// var url = gtfs
gtfs.forEach(function (name, index) {
var url = 'gtfs/' + name + '.txt';
$.ajax(url, {
type: 'get',
dataType: 'text',
error: function (xhr, textStatus) {
// Rejecting promise to make db.open() fail.
reject(textStatus);
},
success: function (data) {
// Resolving Promise will launch then() below.
var result = csvJSON(data);
var res = JSON.parse(result);
console.log("Got ajax response. We'll now add the objects.");
// By returning the db.transaction() promise, framework will keep
// waiting for this transaction to commit before resuming other
// db-operations.
resolve(data);
}
});
});
现在可以正常工作了(实际上,它遍历每个 txt 文件,但只解析最后一个文件),我不能像原始示例代码那样将所有内容都保留在 'someTable' 中。因此,如上所示,我创建了我的新商店。不过,我遇到了这个障碍,我必须将 table 硬编码为一种方法。即db.calendar
。
}).then(function (data) {
var result = csvJSON(data);
var res = JSON.parse(result);
console.log("Got ajax response. We'll now add the objects.");
// By returning the db.transaction() promise, framework will keep
// waiting for this transaction to commit before resuming other
// db-operations.
return db.transaction('rw', db.calendar, function () {
res.forEach(function (item) {
console.log("Adding object: " + JSON.stringify(item));
db.calendar.add(item);
})
})
}).then(function () {
console.log("Transaction committed");
});
})
为了保留我的代码 'DRY' 是否至少有一种方法可以在数据库中获取所有已创建的 table 方法,我可以分别添加这些方法。如果是这样,那是否仍然让我处理我为每个 table 创建的关键路径?
在提出这个问题时,这是 dexie 版本: "dexie": "^1.4.2"
https://github.com/dfahlander/Dexie.js/issues/320#issuecomment-248760222