2016-01-25 29 views
0

我已經創建了一個帶有sql.js文檔的小腳本,但是我無法將緩衝區寫入a.db(Win) console給我錯誤:「未捕獲TypeError:必須以數字,緩衝區,數組或字符串開頭」 是關於「var data = db.export();」函數還是在我的代碼中有錯?electron sql.js未捕獲TypeError:必須以數字,緩衝區,數組或字符串開頭

var fs = require("fs"); 
var remote = require('remote'); 
var SQL = remote.require('sql.js'); 
var file = "a.db" 
var exists = fs.existsSync(file); 

if(!exists) { 
console.log("DB creation: "+file+ ""); 
fs.openSync(file, "w"); 
} 

var filebuffer = fs.readFileSync(file); 

// Load the db 
var db = new SQL.Database(filebuffer); 
// Run a query without reading the results 
db.run("CREATE TABLE test (col1, col2);"); 
// Insert two rows: (1,111) and (2,222) 
db.run("INSERT INTO test VALUES (?,?), (?,?)", [1,111,2,222]); 

var data = db.export(); 
var buffer = new Buffer(data); 
fs.writeFileSync(file, buffer); 

回答

0
var SQL = remote.require('sql.js'); 

你爲什麼做遠程需要在這裏? sql.js不是內置的主進程模塊,因此沒有理由在渲染器進程中不能執行常規的require('sql.js')。您應該非常小心使用remote模塊,因爲跨進程邊界的序列化可能會產生不良副作用(API docs中記錄了這些副作用)。

+0

您好, 因爲sql.js的stdout錯誤我使用了遠程,但似乎不是正確的方式,所以我用sql-debug.js來代替,如果sql.js和我已經註釋掉了這些行和應用程序工作正常: 'if(ENVIRONMENT_IS_WEB && preloadStartTime!== null){ Module.printErr('pre-main prep time:'+(Date.now() - preloadStartTime)+'ms'); }' 當通過雙擊.exe文件(編譯版本)在窗口上執行應用程序時,由於在控制檯中寫入的行被觸發,該行不在Windows上,除非應用程序使用提示 –

+0

你有沒有嘗試過'process.stdout.write = console.log.bind(console);'需要'sql.js'之前? –

+0

@VadimMacagon我做過'process.stderr.write = console.error.bind(console); process.stdout.write = console.log.bind(console); var SQL = require('sql.js');' 它工作。 (我正在使用Electron。)感謝您的建議! – tjklemz

相關問題