подключите sequelize.js to node-настольное приложение webkit с использованием sqlite


В настоящее время я использую привязку node-sqlite3 sqlite на моемnode-webkit настольном приложении и использую его как

var sqlite3 = require('node_sqlite3').verbose();
var db = new sqlite3.Database('file:data.db');
db.run(query);

И, насколько мне известно, этот изначально скомпилированный node-sqlite3-единственный способ использовать SQLite db с node-webkit.

Теперь я хочу использовать sequelize на приложение, которое обычно используется как:

var Sequelize = require('sequelize-sqlite').sequelize
var sqlite    = require('sequelize-sqlite').sqlite
var sequelize = new Sequelize('database', 'username', 'password', {
dialect: 'sqlite',
storage: 'path/to/database.sqlite'
})
sequelize.query("SELECT * FROM myTable").success(function(myTableRows) {
console.log(myTableRows)
})

Как я могу этого достичь ? (т. используйте sequelize on node-webkit app с sqlite)

Цель состоит в том, чтобы облегчить жизнь базы данных, запустив миграции , использовать модели для управления базой данных или предложить, если есть какие-либо другие библиотеки javascript (MVC предпочтительнее) , которые могут работать через node-webkit+sqlite (и как заставить их работать) .

Является ли angularjs вариантом ? если да, то как это сделать.

Спасибо.

3   4   2013-08-17 21:23:30

3 ответа:

Я нашел решение. после использования следующего sqlite3 для node-webkit и перестроения его как в

Узел sqlite 3 для узла-webkit
он создает папку с именем "node_sqlite3" внутри node_modules . Я переименовал "node_sqlite3 "в"sqlite3". а потом сделал npm-установку sequelize-sqlite .
после этого sequelize-sqlite автоматически распознает и подключается к sqlite3, и его можно нормально использовать.

var Sequelize = require('sequelize-sqlite').sequelize
var sqlite    = require('sequelize-sqlite').sqlite

var sequelize = new Sequelize('database', 'username', '', {
dialect: 'sqlite',
storage: 'file:data.db'
})

var Record = sequelize.define('Record', {
name: Sequelize.STRING,
quantity: Sequelize.INTEGER
})

sequelize.sync()
.success(function(){
console.log('synced')
})

var rec = Record.build({ name: "sunny", quantity: 3 });
rec.save()
.error(function(err) {
// error callback
alert('somethings wrong')
})
.success(function() {
// success callback
console.log('inserted')
});

И записи находятся в базе данных.

У меня также была проблема с подключением к базе данных SQLite из node-webkit с помощью sequelize. Методом проб и ошибок я пришел к следующему решению.

var Sequelize = require('sequelize');
var sequelize = new Sequelize('sqlite:mydb.sqlite3', {
  dialect: 'sqlite',
  storage: './mydb.sqlite3'
});

sequelize.query("SELECT * FROM tableName", { type: db.QueryTypes.SELECT })
.then(function(result) {
  console.log(result);
})
.catch(function (e) {
  console.log(e);
});

Обратите внимание, что для базы данных SQLite необходимо указать

storage: './mydb.sqlite3'

Это путь к вашему файлу БД. Это может быть либо абсолютный путь, либо относительный. ./ означает корневую папку проекта, в которой находится package.json.

Также строка соединения должна содержать префикс sqlite:. В противном случае он вызовет исключение: Cannot read property 'replace' of null. Часть после sqlite: префикс является безотзывным и даже может быть опущен, поскольку фактическое местоположение БД указано в параметре storage. Опция dialect также может быть опущена, так как тип db указан в префиксе строки соединения. Таким образом, вы можете подключиться, просто используя

var sequelize = new Sequelize('sqlite:', {
  storage: './mydb.sqlite3'
});

Также стоит отметить, что методы .success и .error являются устаревшими. На момент написания этой статьи последняя версия Sequelize (3.21) использует метод .then для обработки операций, если обещание выполнено, и метод .catch если обещание будет отвергнуто.

В Node-WebKit вы можете использовать модули, написанные полностью на JavaScript. Для модулей, содержащих C / C++, вы должны построить аддоны по узел-ГИП потому что ABI (двоичный интерфейс приложения) node-webkit отличается от ABI узла.

Попробуйте что-нибудь вроде sequelize-sqlite Чтобы 100% JS или найти модули в npm зайдите в его репозиторий GitHub и под строкой commits, branch, releases & contributor Нажмите цветную строку "показать статистику языка".