2017-04-02 56 views
0

我正在使用sqlite作爲其數據源創建一個使用環回脫機同步的科爾多瓦應用程序。這裏是我的代碼:與科爾多瓦sqlite的環回脫機同步

lbclient \ datasources.json:

{ 
"remote": { 
    "connector": "remote" 
}, 
"sqlite": { 
    "connector": "sqlite", 
    "location": "default", 
    "file_name": "sqlite.sqlite3", 
    "debug": false 
    } 
} 

lbclient \ lbclient.js:

'use strict'; 

var loopback = require('loopback'); 
var boot = require('loopback-boot'); 
var client = module.exports = loopback(); 

if (client.connectorRegistry) { 
    console.log(client.connectorRegistry); 
} 
client.connector('sqlite', require('loopback-connector-cordova-sqlite')); 

boot(client); 

在我browser.bundle.js,我注意到,在try塊執行兩次

app.dataSource = function(name, config) { 
    try { 
    var ds = dataSourcesFromConfig(name, config, this.connectors, this.registry); 
    this.dataSources[name] = 
    this.dataSources[classify(name)] = 
    this.dataSources[camelize(name)] = ds; 
    ds.app = this; 
    return ds; 
    } catch (err) { 
    if (err.message) { 
    err.message = g.f('Cannot create data source %s: %s', 
    JSON.stringify(name), err.message); 
    } 
    throw err; 
    } 
}; 

這裏的dataSourcesFromConfig:

function dataSourcesFromConfig(name, config, connectorRegistry, registry) { 
    var connectorPath; 

    assert(typeof config === 'object', 
    'can not create data source without config object'); 

    if (typeof config.connector === 'string') { 
    name = config.connector; 
    if (connectorRegistry[name]) { 
     config.connector = connectorRegistry[name]; 
    } else { 
     connectorPath = path.join(__dirname, 'connectors', name + '.js'); 

     if (fs.existsSync(connectorPath)) { 
      config.connector = require(connectorPath); 
     } 
    } 
    if (config.connector && typeof config.connector === 'object' && !config.connector.name) 
     config.connector.name = name; 
    } 

    return registry.createDataSource(config); 
} 

在dataSourcesFromConfig的首次運行時,DB(源碼)被初始化得很好,但在第二輪,我現在得到的錯誤:

browser.bundle.js:93172 Uncaught TypeError: Cannot create data source "sqlite": fs.existsSync is not a function 

爲什麼我遇到的是什麼?你能幫我麼。非常感謝。

回答

0

您必須要求連接器,否則browserify不知道它需要包含在最終包中。以編程方式執行,你可以內聯需要sqlite連接器,然後在你想用sqlite使用的每個模型上使用attachTo。以引導腳本爲例:

const DataSource = require("loopback-datasource.juggler").Datasource  

module.exports = (app) => { 

    const local = new Datasource({ 
     file_name:"dev.sqlite3", 
     location: "default", 
     name: "local", 
     connector: require("loopback-connector-cordova-sqlite") 
    }) 

    app.models["myModel"].attachTo(local) 
}