在SailsJS中设置初始化的更好位置
Better place to setup an initialisation in SailsJS
我是Sails的新手,不知道在所有应用程序中,对象的初始化应该是唯一的。在阅读了这些文档后,我认为我可以将其放在全局sails
对象中,但不确定是否是更好的位置。
我正在使用新的Appcelerator ArrowDB来存储我的用户和对象。文档讨论声明适当的vars并使用它,使用APP_KEY。
var ArrowDB = require('arrowdb'),
arrowDBApp = new ArrowDB('<App Key>');
function login(req, res) {
var data = {
login: req.body.username,
password: req.body.password,
// the req and res parameters are optional
req: req,
res: res
};
arrowDBApp.usersLogin(data, function(err, result) {
if (err) {
console.error("Login error:" + (err.message || result.reason));
} else {
console.log("Login successful!");
console.log("UserInfo: " + JSON.stringify(result.body.response.users[0]));
}
});
}
但我需要不断使用arrowDBApp
var来创建、更新、删除数据库中的对象,所以我认为最好的方法是在启动脚本app.js
中初始化它,并在整个应用程序中共享。
我试过了,但无法将其存储在sails
变量中,在执行sails.lift((之前,这个变量似乎不可用(或失去配置(。
此代码(app.js文件(在控制台中没有显示任何内容:
// Ensure we're in the project directory, so relative paths work as expected
// no matter where we actually lift from.
process.chdir(__dirname);
// Ensure a "sails" can be located:
(function() {
var sails;
try {
sails = require('sails');
} catch (e) {
console.error('To run an app using `node app.js`, you usually need to have a version of `sails` installed in the same directory as your app.');
console.error('To do that, run `npm install sails`');
console.error('');
console.error('Alternatively, if you have sails installed globally (i.e. you did `npm install -g sails`), you can use `sails lift`.');
console.error('When you run `sails lift`, your app will still use a local `./node_modules/sails` dependency if it exists,');
console.error('but if it doesn''t, the app will run with the global sails instead!');
return;
}
// Try to get `rc` dependency
var rc;
try {
rc = require('rc');
} catch (e0) {
try {
rc = require('sails/node_modules/rc');
} catch (e1) {
console.error('Could not find dependency: `rc`.');
console.error('Your `.sailsrc` file(s) will be ignored.');
console.error('To resolve this, run:');
console.error('npm install rc --save');
rc = function () { return {}; };
}
}
// My own code
var APP_KEY = 'mykey';
var ArrowDB = require('arrowdb');
sails.arrowDBApp = new ArrowDB(APP_KEY);
console.log("Hi" + JSON.stringify(sails));
// Start server
sails.lift(rc('sails'));
console.log("Finish");
})();
不打印"HI"answers"Finish"。如果我尝试在另一个控制器中使用sails.arrowDBApp
,它是未定义的。
欢迎提供提示。
除非确实需要,否则不建议修改app.js
。
保存所有配置信息(例如APP_KEY
(的常用空间位于项目根目录的config目录中。
一次性初始化(例如ArrowDB初始化(可以添加到config/bootstrap.js.
更新
在config/arrowdb.js中(您需要自己创建此文件(:
module.exports.arrowdb = {
APP_KEY: 'yourappkey',
ArrowDBApp: null
};
在config/bootstrap.js:中
var ArrowDB = require('arrowdb');
module.exports.bootstrap = function(next){
sails.config.arrowdb['ArrowDBApp'] = new ArrowDB(sails.config.arrowdb['APP_KEY']);
next(); // Don't forget to add this
};
在您的控制器中:
'task': function(req, res, next) {
sails.config.arrowdb['ArrowDBApp'].usersLogin(...);
// and so on.
// You could also add something like
// var ADB = sails.config.arrowdb['ArrowDBApp'];
// at the top in case you need to use it on and on.
}
- 使用
config/bootstrap.js
在帆升起之前初始化一些东西。有时,如果我们想把一些东西放在global
变量中,这种方法很好用,比如用Bluebird Promise
定义/覆盖本地Promise
- 使用
api/services
可以在代码(控制器、模型等(中放置一些方法或其他您将经常使用的东西,如Mail Service
,用于处理应用程序中的电子邮件发送 - 使用
config
文件夹中的config在sails.config[something]
中预定义一些内容。它可以是一个对象、函数或任何可以配置的东西,比如把Twitterneneneba API Key放在使用TwitterREST API上
为了实现你想要的,我将尝试使用service和bootstrap.js。试试这个例子。
- 在
api/services/ArrowDBService.js
创建服务文件 -
用这个代码放:
var ArrowDB = require('arrowdb'), arrowDBApp = new ArrowDB('<App Key>'); module.exports = { arrowDBApp : arrowDBApp, login : function (req, res) { var data = { login: req.body.username, password: req.body.password, // the req and res parameters are optional req: req, res: res }; arrowDBApp.usersLogin(data, function(err, result) { if (err) { console.error("Login error:" + (err.message || result.reason)); } else { console.log("Login successful!"); console.log("UserInfo: " + JSON.stringify(result.body.response.users[0])); } }); } };
现在您可以通过sails.services.arrowdbservice.login(req,res)
或简单的ArrowDBService.login(req,res)
使用它(注意区分大小写(。由于我不知道ArrowDB,所以您可以自己探索您的示例提供的login
方法。
- 有没有更好的动手、具体的方法来学习Javascript
- 为什么不推荐使用“with”?是否有更好或其他方法可以“下降”到对象的命名空间
- 在JavaScript中拆分日期字符串的更好方法是什么
- 为什么$.brower被弃用?还有什么更好的替代方案
- 设置嵌套对象属性的更好方法
- 您有更好的动态方式来缩短复杂的代码jquery吗
- 用Javascript重新格式化复杂文本日期字符串的更好方法
- 有没有比在app.js上绑定模块名称更好的方法来动态加载视图模型和视图以显示模态
- 如何创建更好的方式来维护基于我的代码访问的最后一个页面
- 什么'这是从第三个函数上的async 1st函数获得结果的更好方法
- 什么更好?使用iframe或jQuery之类的东西在外部网站中加载HTML文件
- 将数组从javascript格式化为php的更好方法,反之亦然
- jquery:将动画绑定到滚动条位置的更好方法
- 有更好的方法吗?(递归解析HTML unicode实体)
- 我应该如何将响应数据保存在对象(json)中以获得更好的操作和性能
- 有什么比document.execCommand更好的东西吗
- 使用较少代码隐藏和显示选择菜单内容的更好方法是什么?javascript
- 编写if-else语句的更好方法
- 我能从“;输入“;事件是否有更好的方法来跟踪文本更改
- 在SailsJS中设置初始化的更好位置