나는 Express 4.0과 함께 Bookshelf을 사용하려고 노력하고있어 함께 작업 할 수 없거나 오히려 "모범 사례"를 따르지 않는 것으로 보입니다. 책장 문서에는 항상 앱 전체에서 동일한 인스턴스를 다시 사용해야한다고 나와 있습니다. 내가 별도의 파일에 app.get()
을 사용할 때Express를 사용하여 BookshelfJS의 인스턴스를 설정하고 검색하는 방법은 무엇입니까?
// When the app starts
var app = express();
var knex = require('knex')(dbConfig);
var bookshelf = require('bookshelf')(knex);
app.set('bookshelf', bookshelf);
// elsewhere, to use the bookshelf client:
var bookshelf = app.get('bookshelf');
var Post = bookshelf.Model.extend({
// ...
});
그러나, 나는이 작업을 얻이 수없는 것 : 심지어 예를 보여줍니다. 내가 직접 필요한 경우
var express = require('express');
var app = express();
var knex = require('knex')({ //my db settings go here });
var bookshelf = require('bookshelf')(knex);
module.exports = bookshelf;
위의 코드가 작동합니다
var express = require('express');
var app = express();
var db = require('./server/db/db');
app.set('bookshelf', db);
var api = require('./server');
app.use(api);
가 여기에 위의 요구됩니다 내 db.js
파일의 예를 들어, 여기 내 app.js
파일 (내 전체 응용 프로그램의 루트)입니다. 문제가 발생한 부분은 다음과 같습니다. 책꽂이 연결을 실제로 사용할 때마다 어떤 파일이든 관계없이 동일한 프로세스를 수행하지만 실패하면 "책장"은 항상 정의되지 않습니다. 항상이 정의되지 않은납니다
var express = require('express');
var app = express();
var db = app.get('bookshelf');
console.log(db);
DB 다음은 app.js
에서 요구하고 "API"라고 index.js
파일의 예입니다. 새 모델을 만들려고 할 때마다 db.Model.extend({})
을 수행하고 Model
속성에 액세스하려고하면 (정의되지 않았기 때문에) 오류가 발생하지만 동일한 프로세스를 사용합니다.
Bookshelf와 Express 문서를 모두 사용하면이 작업이 가능하고 그렇지 않은 것에 동의합니다. 어떤 아이디어?
var myApp = express();
설정하거나 같은 응용 프로그램에서 변수를 얻고 싶은 경우에, 당신은 인자로 전달해야합니다 :
아, 훌륭합니다. 왜 다른 코드베이스 중 일부는 정교하고 그저 필요로하는 것만으로도 귀찮은 이유를 설명합니다. – antjanus