我正在尝试将Strongloop与 MySql 集成,但是无法弄清如何迁移或自动创建表格到 MySql 数据库。
是否至少有一种方法可以将模型导出到 MySql 模式中,还是我必须手动创建表格?
我一直在尝试使用 mysql 演示应用程序,并阅读文档了一段时间,但没有成功 - http://docs.strongloop.com/display/DOC/MySQL+connector
谢谢!
我正在尝试将Strongloop与 MySql 集成,但是无法弄清如何迁移或自动创建表格到 MySql 数据库。
是否至少有一种方法可以将模型导出到 MySql 模式中,还是我必须手动创建表格?
我一直在尝试使用 mysql 演示应用程序,并阅读文档了一段时间,但没有成功 - http://docs.strongloop.com/display/DOC/MySQL+connector
谢谢!
我创建了/server/boot/autoupdate.js
。它在应用程序启动时运行。它加载“model-config”和“datasources” JSON,并将所有模型迁移或更新到为它们定义的数据源。
# /server/boot/autoupdate.js
module.exports = function(app) {
var path = require('path');
var models = require(path.resolve(__dirname, '../model-config.json'));
var datasources = require(path.resolve(__dirname, '../datasources.json'));
function autoUpdateAll(){
Object.keys(models).forEach(function(key) {
if (typeof models[key].dataSource != 'undefined') {
if (typeof datasources[models[key].dataSource] != 'undefined') {
app.dataSources[models[key].dataSource].autoupdate(key, function (err) {
if (err) throw err;
console.log('Model ' + key + ' updated');
});
}
}
});
}
function autoMigrateAll(){
Object.keys(models).forEach(function(key) {
if (typeof models[key].dataSource != 'undefined') {
if (typeof datasources[models[key].dataSource] != 'undefined') {
app.dataSources[models[key].dataSource].automigrate(key, function (err) {
if (err) throw err;
console.log('Model ' + key + ' migrated');
});
}
}
});
}
//TODO: change to autoUpdateAll when ready for CI deployment to production
autoMigrateAll();
//autoUpdateAll();
};
要迁移的模型。如果不存在,则应用于所有模型。
自动更新也是如此。 - Overdrivr在app.start方法之前,可以通过将以下行添加到您的server.js文件中来简单迁移模型:
app.datasources['mySqlConnection'].automigrate(['orders','customers', 'User', 'ACL'], function(err) {
console.log(err);
});
slc run
运行应用程序。注意:
mySqlConnection
是连接名称,请将其替换为您自己的连接名称。
要更新和/或创建模型的所有 MySQL 表:
var dataSource = app.dataSources.mysql;
dataSource.autoupdate(null, function (err) {
if(err) return cb(err);
return cb();
});
ds.automigrate(schema_v1.name, function () {}
。 - glesage在我的情况下,我手动创建了MySQL表格,然后创建了模型。对于现有的MySQL表格,我会创建与属性名称与MySQL字段名称相同的模型。
以下是我使用StrongLoop LoopBack与MySQL数据库的步骤:
npm install loopback-connector-mysql --save
安装MySQL连接器。datasources.json
文件中添加你的MySQL数据库细节。slc lb model tablename -i
或编辑models.json
文件并手动添加属性(文档:http://docs.strongloop.com/display/DOC/Creating+a+LoopBack+application#CreatingaLoopBackapplication-Creatingmodels)。createDatabase
选项。 "mysql": {
"host": "localhost",
"port": 0,
"database": "db",
"username": "root",
"password": "",
"name": "mysql",
"connector": "mysql",
"debug": false,
"createDatabase": true
}
所以你不需要自己编写查询来创建基础。
希望能有所帮助。var async = require('async');
var SYSTEM_SETTINGS = [
{
"settingName": "mustPayInAdvance",
"settingValue": "false",
}
];
module.exports = function(app) {
var path = require('path');
var models = require(path.resolve(__dirname, '../model-config.json'));
var datasources = require(path.resolve(__dirname, '../datasources.json'));
var modelUpdates = [];
function buildModelListForOperation(){
Object.keys(models).forEach(function(key) {
if (typeof models[key].dataSource != 'undefined') {
if (typeof datasources[models[key].dataSource] != 'undefined') {
modelUpdates.push({operation: app.dataSources[models[key].dataSource], key: key});
}
}
});
}
function createStaticData() {
app.models.SystemSettings.create(SYSTEM_SETTINGS, function(err, created) {
if (err)
throw err;
else
console.log('Sample data was imported.');
});
}
function processModelsAndData(operationType) {
buildModelListForOperation();
// Create all models
async.each(modelUpdates, function(item, callback) {
item.operation[operationType](item.key, function (err) {
if (err) throw err;
console.log('Model ' + item.key + ' migrated');
callback();
});
}, function (err) {
if (err) throw err;
createStaticData();
});
}
//TODO: change to 'autoupdate' when ready for CI deployment to production
processModelsAndData('automigrate');
};
我发现了一种简单的方法来完成这个任务。参考链接是:点击这里
你可以使用原型或不使用,在我的情况下,我没有使用。
关于文档,你应该使用:
ds.autoupdate (models, function (error) {
if (!error) {
console.log( "Updated models.");
}else{
console.log( "An error has occurred:" + error);
}
ds.disconnect();
});
在哪里:
var path = require ( 'path');
var app = require (path.resolve (__ dirname, '../server/server'));
var ds = app.datasources.x;
而 x 是数据源属性名称,例如 /server/datasources.json 的示例:
{
"x": {
"Host": "localhost"
"Port": 3306,
"Database", "loopapp"
"Password": "",
"Name": "x"
"User", "root"
"Connector": "mysql"
}
}
注意(1):模型可以是字符串模型名称或一个字符串数组(模型名称)。
注意(2):如果您不想放置模型,所有基属性等于“PersistedModel”的文件的所有模型将被更新。
因此,我像这样使用:
autoupdate function () { ds.autoupdate (function (error) { if (!error) { console.log( "已更新所有模型" ); }else { console.log( "发生错误:" + error); } ds.disconnect(); }); }
然后,我调用了:autoupdate();
您可以将此代码放入file.js文件中,并调用命令行:node file.js。
如果您希望每次启动程序时都调用此文件,请将其放在/server/boot/file.js路径下。
显然,如果您想要使用automigrate,则只需将上面的代码中的autoupdate单词替换为automigrate即可。