2015-04-30 14 views
7

Jak przenieść wbudowane modele, takie jak użytkownik, role, odwzorowanie ról użytkownika itp. ... do utworzonej przez nas bazy danych zamiast domyślnego źródła danych: db? Wbudowane modele nie mają listy w łuku.Migracja wbudowanych modeli do baz danych

Próbowałem już stworzyć nowy model, który dziedziczy ten model podstawowy. Ale dane nie są zapisywane w nowym modelu.

Proszę o poradę ... Siedziałem na tym przez kilka tygodni. Dzięki

Odpowiedz

9

Domyślne źródło danych "db" zostaje umieszczone w pamięci. Dlatego Twoje dane nie są przechowywane po ponownym uruchomieniu aplikacji. Musisz zainstalować odpowiednie złącze do bazy danych, a następnie musisz dodać źródło danych do bazy danych wewnątrz serwera/datasources.js.

http://docs.strongloop.com/display/public/LB/Connecting+models+to+data+sources

Jeśli utworzono aplikację za pomocą polecenia „SLC sprzężenia zwrotnego”, wówczas źródło danych zawiera tylko złącze pamięci. Sprawdzić datasources.js pliku i będzie można zobaczyć coś takiego:

{ 
    "db": { 
    "name": "db", 
    "connector": "memory" 
    } 
} 

Jeśli chcesz utrzymywać swoje dane, na przykład w PostgreSQL (proces jest prawie taka sama dla wszystkich obsługiwanych złącza), trzeba rozwinąć swoje datasoruces. Plik json z informacjami o bazie danych:

{ 
    "db": { 
    "name": "db", 
    "connector": "memory" 
    }, 

    "mydata": { 
    "host": "db_host", 
    "database": "your_database_name", 
    "username": "your_db_username", 
    "password": "your_db_password", 
    "connector": "postgresql" 
    } 
} 

Możesz to również zrobić za pomocą polecenia "slc loopback: datasource". Kreator pomoże ci zdefiniować źródło danych. Nie zapomnij zainstalować złącza db.

npm install loopback-connector-postgresql 

Ostatnią rzeczą do zrobienia jest przypisanie źródła danych do pożądanych modeli. Możesz to zrobić za pomocą kreatora (zobacz polecenie slc loopback: model command) lub możesz ręcznie edytować plik server/model-config.json.

{ 
    "User": { 
    "dataSource": "mydata", 
    "public": true 
    }, 
    "AccessToken": { 
    "dataSource": "mydata", 
    "public": false 
    }, 
    "ACL": { 
    "dataSource": "mydata", 
    "public": false 
    }, 
    "RoleMapping": { 
    "dataSource": "mydata", 
    "public": false 
    }, 
    "Role": { 
    "dataSource": "mydata", 
    "public": false 
    } 
} 

UPDATE Można spróbować ten fragment kodu, aby zaktualizować tabel z modeli. Umieścić swój kod gdzieś na serwerze/server.js

var appModels = ['User', 'AccessToken', 'ACL', 'RoleMapping', 'Role']; 

var ds = app.dataSources.mydata; 
ds.isActual(appModels, function(err, actual) { 
    if (!actual) { 
    ds.autoupdate(appModels, function(err) { 
     if (err) throw (err); 
    }); 
    } 
}); 

polecam do zapoznania się o tworzeniu/aktualizacji schematu bazy danych z modeli na stronie strongloop. Zwrócić uwagę przylegać różnicy między autoupdate i automigrate funkcji

http://docs.strongloop.com/display/public/LB/Creating+a+database+schema+from+models

+0

Dziękuję za odpowiedź. Próbowałem już tego samego. Tylko jeden problem: nie mogę przeprowadzić migracji do bazy danych. Próbowałem już używać Arc i polecenia cli. –

+0

Czy możesz wyjaśnić więcej szczegółów, co próbujesz? –

+1

Mam zaktualizowaną odpowiedź za pomocą kodu i łącza do dokumentów, gdzie można przeczytać więcej o aktualizowaniu schematu z modeli. –

Powiązane problemy