2015-01-04 3 views
2

Я хочу включить файл базы данных .db для использования с sqlite3 в моем проекте node.js. Моя проблема возникает, когда модуль, который открывает соединение с базой данных, требуется файлами в разных каталогах.Работа с относительными путями с node.js

Моя структура проекта следующим образом:

project/ 
|--lib/ 
| |--foo.js 
| `--bar.js 
|--db/ 
| `--database.db 
`--server.js 

Мой foo.js файл содержит открывает базу данных следующим образом:

var sqlite3 = require('sqlite3'); 
var db = new sqlite3.Database('db/database.db'); 

module.exports = { 
    foo: function() { 
    db.serialize(function() { /* Do database things */ }); 
    } 
}; 

Это все прекрасно работает, когда foo.js требуется от server.js файла, как так:

var foo = require('./lib/foo'); 

Но он не работает, если требуется из файла внутри каталога lib, bar.js.

var foo = require('./foo'); 

Я предполагаю, что это потому, что, когда этот файл запускается из каталога lib то файл .db должен быть на самом деле ../db/database.db.

Как я могу обойти это, что мне делать?

ответ

4

концепция текущий каталог отличается при использовании sqlite3.Database функцией в разных сценариях. он работает в соответствии с кодом this line исходного кода sqlite3.

Таким образом, вы должны явно указывать текущий каталог каждый раз, когда используете его. Согласно макете проекта, правильный путь к файлу базы данных в lib/foo.js является

var path = require('path') 
// specify current directory explicitly 
var db = new sqlite3.Database(path.join(__dirname, '..', 'db', 'database.db')); 

Тогда это работает независимо от того, где он требует foo.js.

Смежные вопросы