【问题标题】:Connect existing MySql table with Strongloop用 Strongloop 连接现有的 MySql 表
【发布时间】:2015-06-27 08:54:02
【问题描述】:

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

实际上 nodejs 和 strongloop 对我来说是新的,这是我第一次使用它们。我遵循了他们的文档并在 mysql 中创建了一个表,我运行如下文件

我已按照以下 github 文档中的命令创建模型、属性等

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

create-test-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 连接它。

我一无所知,任何帮助将不胜感激。

【问题讨论】:

    标签: mysql node.js strongloop


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      我发现这试图做同样的事情。我修好了它,让它优雅地结束。对我很有用。 原文: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;
                      }
                  });
              });
          });
      }
      

      【讨论】:

      【解决方案3】:

      您真正需要的是从数据库中发现模型。 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 连接器。这将遍历所有表,并且“模式”将包含从数据库中发现的模型定义。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-03
        • 1970-01-01
        • 1970-01-01
        • 2016-02-21
        • 1970-01-01
        相关资源
        最近更新 更多