永远的监视器和sqlite3

时间:2014-12-16 12:15:05

标签: node.js sqlite forever

我的节点应用正在返回

Error: SQLITE_CANTOPEN: unable to open database file

我的应用具有以下结构:

.controllers/
|--getter.js
|--setter.js
.system.js
.slave.js

System.js

var forever = require('forever-monitor');
var path = require('path');
var relativeDir = path.dirname(module.filename);

var childWorker = new(forever.Monitor)(path.join(relativeDir,'slave.js'), {
  max: 3,
  silent: true,
  options: []
});

slave.js

...
var getter = require('./controllers/getter.js');
var setter = require('./controllers/setter.js');
...

getter.js / setter.js

var fs = require('fs');
var sqlite3 = require('sqlite3').verbose();
var dbPath = '/ABSOLUTEPATH/db';
if (fs.existsSync(dbPath)) {
  console.log("[Getter] DB file found");
  var db = new sqlite3.Database(dbPath, sqlite3.OPEN_READONLY);
}
else {
  console.log("[Getter] Cannot find DB file");
}

我尝试过从绝对路径转换到相对路径并更改数据库的所有者而没有任何运气。该应用程序能够找到数据库文件,但由于某种原因无法打开它。

之后我制作了一个简单的脚本" test.js"并把它放在" system.js"的同一个目录中。 我运行它,它没有错误地工作并返回正确的值。

var sqlite3 = require("sqlite3");
var dbPath = "/ABSOLUTEPATH/db";
var db = new sqlite3.Database(dbPath, sqlite3.OPEN_READONLY);

var sqlQuery = 'SELECT lat, long FROM kkk';
db.get(sqlQuery, function(err, row) {
    if (err) {
      console.log(err);
      console.log('err!');
    } else {
      console.log(JSON.stringify(row));
    }
  });

1 个答案:

答案 0 :(得分:1)

写下这个命令" sudo chown www-data。 。 "在db文件目录中。

其他解决方案检查文件是否存在?

前:

var fs = require(" fs");

var exists = fs.existsSync(dbfilepath);