2015-04-20 48 views
0

我想創建一個REST API,它應該連接到mysql數據庫中的現有表並返回與我們發送的參數相對應的數據。用Strongloop連接現有的MySql表

其實nodejs和strongloop對我來說是新的,這是第一次與他們合作。我按照他們的文檔和在MySQL中創建一個表我運行的文件中像下面

我按照命令來創建模型,從下面的GitHub的文檔屬性等

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: '[email protected]', 
     created: new Date(), 
     modified: new Date() 
    }, { 
     email: '[email protected]', 
     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連接。

我完全無能爲力,任何幫助將不勝感激。

回答

0

實際需要的是從數據庫中發現模型。在一個強壯的頁面上有一個文檔可用。

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連接器。這將循環遍歷所有的表,「模式」將包含從數據庫中發現的模型定義。

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; 
       } 
      }); 
     }); 
    }); 
} 
+0

是這條線是否正確? 'var dataSource = app.dataSources.accountDs' – sidonaldson

+1

@sidonaldson是的,只要你的數據源的'name'是'accountsDs'。 – webeno

+0

根據你的腳本,我創建了一個也更新'model-config.json'文件的腳本:https://gist.github.com/benomatis/dd78b482d2b089b06d6f523ec98f9b62 – webeno

0

您可以使用slc arc生成基於你的MySQL表模型,之後你應該能夠使用API​​來執行基本的CRUD操作。在下面的鏈接,你可以找到更多關於它的信息:

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