Я новичок в Sails и не знаю точно, где поставить инициализацию объекта уникальным во всем приложении. После прочтения документов я предположил, что могу иметь его в глобальном объекте sails
, но не уверен, что это лучшее место.Лучшее место для установки инициализации в SailsJS
Я использую новый Appcelerator ArrowDB для хранения моих пользователей и объектов. Документы говорят о объявлении соответствующих варов и использовании его с помощью 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
вар создавать, обновлять, удалять объекты в базе данных, так что я думаю, что лучший способ, чтобы инициализировать его в исходном сценарии app.js
и обмениваться через приложение.
Я попробовал это, но я не смог его сохранить в файле sails
var, кажется, что этот var не доступен (или теряет его конфигурацию) до тех пор, пока не будет выполнен 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" и не "Отделка" печатаются. Если я попытаюсь использовать sails.arrowDBApp
в другом контроллере, он не определен.
Подсказки приветствуются.
Спасибо @ Andi. С вашей стороны, строка 'arrowDBApp = new ArrowDB ('');' будет выполняться каждый раз? То, что я ищу, это выполнить эту строку только один раз (например, Singleton) и иметь 'arrowDBApp' как var, доступный для всех контроллеров, для последующего выполнения' arrowDBApp.usersCreate() ',' arrowDBApp.usersUpdate() ', и т. д. –
Eagle
AFAIK It's singleton. –
Я думаю, что этот способ не подходит для моих целей, потому что я ищу «shared» 'arrowDBApp' для использования в других контроллерах, и таким образом я разделяю функции напрямую (это не то, что я хочу) – Eagle