ant*_*nus 1 javascript node.js express bookshelf.js
我正在尝试使用Bookshelf和Express 4.0,似乎无法使它们一起工作或者更确切地说,我似乎无法遵循"最佳实践".Bookshelf文档提到应该始终在整个应用程序中重用相同的实例.它甚至列举了一个例子:
// 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({
// ...
});
Run Code Online (Sandbox Code Playgroud)
但是,当我必须app.get()
在一个单独的文件中使用时,我似乎无法使它工作.例如,这是我的app.js
文件(我的整个应用程序的根目录):
var express = require('express');
var app = express();
var db = require('./server/db/db');
app.set('bookshelf', db);
var api = require('./server');
app.use(api);
Run Code Online (Sandbox Code Playgroud)
这是我db.js
上面需要的文件:
var express = require('express');
var app = express();
var knex = require('knex')({ //my db settings go here });
var bookshelf = require('bookshelf')(knex);
module.exports = bookshelf;
Run Code Online (Sandbox Code Playgroud)
如果我直接要求,上面的代码可以工作.这是问题出现的地方.每当我想要实际使用书架连接时,无论我在哪个文件中,我都遵循相同的过程,但它失败并且"书架"总是未定义的.这是一个index.js
需要的文件示例,在以下内容中称为"api" app.js
:
var express = require('express');
var app = express();
var db = app.get('bookshelf');
console.log(db);
Run Code Online (Sandbox Code Playgroud)
DB 总是以未定义的方式出现.每当我尝试创建一个新模型时,我使用相同的过程,除了我做一个db.Model.extend({})
并尝试访问该Model
属性会抛出一个错误(因为它是未定义的).
从我可以使用的书架和Express文档同意这应该工作,它不会.有任何想法吗?
每次调用时,此行都会创建一个新应用:
var myApp = express();
Run Code Online (Sandbox Code Playgroud)
如果要从同一个应用程序设置或获取变量,则必须将其作为参数传递.
var api = require('./server')(myApp);
Run Code Online (Sandbox Code Playgroud)
然后在你的api模块中:
module.exports = function(app){
var db = app.get('bookshelf');
//....
};
Run Code Online (Sandbox Code Playgroud)
旁注:你不必担心Node.js中的单身人士,你只需要它就可以了.
var db = require('./path/to/db/config');
Run Code Online (Sandbox Code Playgroud)
它只会被实例化一次并缓存以供以后调用.
归档时间: |
|
查看次数: |
864 次 |
最近记录: |