2015-01-04 2 views
2

내 node.js 프로젝트에서 sqlite3과 함께 사용할 .db 데이터베이스 파일을 포함하고 싶습니다. 내 문제는 데이터베이스 연결을 여는 모듈이 다른 디렉토리의 파일에 필요할 때 발생합니다.node.js를 사용하여 상대 경로 처리

내 프로젝트 구조는 그래서 같다 : foo.js이 같은 server.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 파일이 포함

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

데이터베이스과 같이 열립니다 그래서 :

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

lib 디렉토리의 파일 bar.js에서 필요한 경우 작동하지 않습니다.

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

나는이 파일이 lib 디렉토리에서 시작되면 다음 .db 파일이 실제로 ../db/database.db을해야하기 때문입니다 가정합니다.

어떻게이 문제를 해결할 수 있습니까? 어떻게해야합니까?

답변

4

현재 디렉토리은 다른 스크립트에서 sqlite3.Database 기능을 사용할 때 달라집니다. 그것은sqlite3 소스 코드에서 설계된대로 작동합니다.

따라서 현재 디렉토리를 사용할 때마다 명시 적으로 지정해야합니다. 프로젝트 레이아웃에 따르면, lib/foo.js에서 데이터베이스 파일에 대한 올바른 경로는 foo.js을 요구 곳

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

는 그 다음에 상관없이 작동하지 않습니다.