使用Strongloop连接现有的MySql表

时间:2015-04-20 14:47:30

标签: mysql node.js strongloop

我正在尝试创建一个REST API,它应该连接到mysql数据库中的现有表,并返回与我们发送的参数相对应的数据。

其实nodejs和strongloop对我来说是新手,这是我第一次与他们合作。我已经关注他们的文档并在mysql中创建了一个表,我运行了如下文件

我已按照以下命令从以下github docs

创建模型,属性等

https://github.com/strongloop/loopback-example-database

创建测试-data.js

var server = require('./server');
var dataSource = server.dataSources.accountDB;
var Account = server.models.account;
var accounts = [
    { email: 'foo@bar.com',
      created: new Date(),
      modified: new Date()
    }, {
      email: 'bar@bar.com',
      created: new Date(),
      modified: new Date()
    } ];

var count = accounts.length;
dataSource.automigrate('account', function(er) {
  if (er) throw er;
  accounts.forEach(function(account) {
    Account.create(account, function(er, result) {
      if (er) return;
      console.log('Record created:', result);
      count--;
      if(count === 0) {
        console.log('done');
        dataSource.disconnect();
      }
    });
  });
});

这会自动在我的数据库中创建表格和记录,我不想要这个。

实际上我已经有了一个不同的表,我想用strongloop连接。

我完全无能为力,任何帮助都会受到赞赏。

3 个答案:

答案 0 :(得分:3)

我发现这试图做同样的事情。我修好它以便优雅地结束。对我来说很棒。 原文:https://gist.github.com/serkanserttop/64fc2d4465fb154066db#file-discover-js

var path = require('path');
var app = require(path.resolve(__dirname, '../server'));
var fs = require('fs');
var loopback = require('loopback');
var app_dir = './';
require('node-babel')();
var dataSource = app.dataSources.accountDs;
var db = 'myDB',
    owner = 'root';

function capitaliseFirstLetter(string) {
    return string.charAt(0)
        .toUpperCase() + string.slice(1);
}

function jsFileString(model_name) {
    return '' + 'module.exports = function(' + capitaliseFirstLetter(model_name) + ') {\n' + '\t\n' + '};';
}

function autoGenerateModelFiles() {
    dataSource.discoverModelDefinitions({
        schema: db
    }, function(err, models) {
        var count = models.length;
        console.log(models.length);
        models.forEach(function(model) {
            dataSource.discoverSchema(model.name, {
                associations: true
            }, function(err, schema) {
                if (schema.options.mysql.schema !== db) {
                    console.log('options.mysql.schema !== db', schema);
                }
                fs.writeFile(app_dir + 'common/models/' + model.name + '.json', JSON.stringify(
                    schema, null, '  '), function(err) {
                    if (err) throw err;
                    console.log('Saved ' + model.name);
                });
                fs.writeFile(app_dir + 'common/models/' + model.name + '.js', jsFileString(
                    model.name), function(err) {
                    if (err) throw err;
                    console.log('Created ' + model.name + '.json file');
                });
                count = count - 1;
                if (len === 0) {
                    console.log("DONE!", count);
                    dataSource.disconnect();
                    return;
                }
            });
        });
    });
}

答案 1 :(得分:0)

您实际需要的是从数据库中发现模型。在strongloop页面上有一个文档。

http://docs.strongloop.com/display/public/LB/Discovering+models+from+relational+databases;jsessionid=1FC0E473B7F589F4F1EFC0F25D269E3E

http://docs.strongloop.com/display/public/LB/Database+discovery+API

这是一个有效的例子:

var ds = app.dataSources.accountDB;
ds.discoverModelDefinitions(function (err, models) {
  models.forEach(function (model) {
    ds.discoverSchema( model.name, function (err, schema){
      console.log(schema);
    });
  });
});

将此代码放在server.js内部(即内部引导方法)。我假设您已正确设置数据源并且还安装了loppback mysql连接器。这将遍历所有表,“schema”将包含从数据库中发现的模型定义。

答案 2 :(得分:0)

您可以使用slc arc基于MySQL表生成模型,之后您应该能够使用API​​执行基本的CRUD操作。在以下链接中,您可以找到有关它的更多信息:

https://strongloop.com/node-js/arc/