在模型中使用buildToken不能用于环回

我试图开始编程一个Android应用程序的api,并希望使用node.js + loopback为此。 但我遇到了一些麻烦testing/学习语言。

下面的代码应该在我的数据库中生成新的用户(而且它),但是当我尝试用这个用户login没有AccessToken创build一个打印到控制台。 任何想法我做错了什么?

我的testing代码:create-test-data.js

var app = require('./app'); var dataSource = app.dataSources.mysql; var loopback = require('loopback'); var User = loopback.User; // Getting User Model var AccessToken = loopback.AccessToken; // Getting AccessTokenModel /* Initializing the database done by this. If already exist it will clean it. dataSource.automigrate('user', function (err) {}); dataSource.automigrate('account', function (err) {}); dataSource.automigrate('accesstoken', function (err) {}); */ //Creating some users in mysql database User.create({username: 'timbo', email: 'test@gmail.com', password: 'monkey123'} , function(err, user) {console.log(user);}); User.create({username: 'timbo2', email: 'test2@gmail.com', password: 'monkey123'} , function(err,user) {console.log(user);}); User.create({username: 'timbo3', email: 'test3@gmail.com', password: 'monkey123'} , function(err,user) {console.log(user);}); User.login({username: 'timbo', password: 'monkey123'}, function(err, accesstoken) {console.log("This is the token: " + accesstoken);}); //No accesstoken created / saved in the database 

datasource.json

 { "db": { "defaultForType": "db", "connector": "mysql", "host": "127.0.0.1", "database": "test", "user": "root", "password": "warcraft" }, "push": { "defaultForType": "push", "connector": "loopback-push-notification", "installation": "installation", "notification": "notification", "application": "application" }, "mail": { "defaultForType": "mail", "connector": "mail" }, "mysql": { "connector": "mysql", "host": "127.0.0.1", "database": "test", "user": "root", "password": "warcraft" } } 

models.json

 { "email": { "options": { "base": "Email" }, "dataSource": "mail", "public": false }, "user": { "options": { "base": "User", "relations": { "accessTokens": { "model": "accessToken", "type": "hasMany", "foreignKey": "userId" } } }, "dataSource": "mysql", "public": true }, "accessToken": { "options": { "base": "AccessToken" }, "dataSource": "mysql", "public": true }, "application": { "options": { "base": "Application" }, "dataSource": "db", "public": true }, "acl": { "options": { "base": "ACL" }, "dataSource": "db", "public": false }, "roleMapping": { "options": { "base": "RoleMapping" }, "dataSource": "db", "public": false }, "role": { "options": { "base": "Role", "relations": { "principals": { "type": "hasMany", "model": "roleMapping", "foreignKey": "roleId" } } }, "dataSource": "db", "public": false }, "scope": { "options": { "base": "Scope" }, "dataSource": "db", "public": false }, "push": { "options": { "base": "Push", "plural": "push" }, "dataSource": "push" }, "installation": { "options": { "base": "Installation" }, "dataSource": "db", "public": true }, "notification": { "options": { "base": "Notification" }, "dataSource": "db", "public": true }, "product": { "properties": { "email": { "type": "string" }, "level": { "type": "number" }, "create": { "type": "date" }, "modified": { "type": "date" } }, "public": true, "dataSource": "db", "plural": "products" }, "account": { "properties": { "email": { "type": "string" }, "level": { "type": "number" }, "created": { "type": "date" }, "modified": { "type": "date" } }, "public": true, "dataSource": "mysql", "plural": "accounts" } } 

控制台输出

 { username: 'timbo', email: 'test@gmail.com', password: '$2a$10$972DFwMOuOhKj5ThfbchC.ipcNaW27ccpHMRkW17uSLutaCHyZF0G', realm: undefined, emailVerified: undefined, verificationToken: undefined, credentials: [], challenges: [], status: undefined, created: undefined, lastUpdated: undefined, id: undefined } { username: 'timbo2', email: 'test2@gmail.com', password: '$2a$10$1peSixaOIQq8umOzzEy86OQKxoPFU.Ax2/NWC1oLGjQHPp9oZdPDW', realm: undefined, emailVerified: undefined, verificationToken: undefined, credentials: [], challenges: [], status: undefined, created: undefined, lastUpdated: undefined, id: undefined } { username: 'timbo3', email: 'test3@gmail.com', password: '$2a$10$X3fdV2dL6kjuj69Dqr.jMeVdqIMzveN7NnJP5TXag54b4tpzZ4LGW', realm: undefined, emailVerified: undefined, verificationToken: undefined, credentials: [], challenges: [], status: undefined, created: undefined, lastUpdated: undefined, id: undefined } This is the token: undefined This is the token err: Error: ER_BAD_FIELD_ERROR: Unknown column 'ttl' in 'field list' 

您必须首先将与用户相关的模型附加到您的数据源:

 loopback.User.attachTo(dataSource); loopback.AccessToken.attachTo(dataSource); loopback.Role.attachTo(dataSource); loopback.ACL.attachTo(dataSource); 

并定义UserAccessToken之间的关系:

 loopback.User.hasMany(loopback.AccessToken, {as: 'accessTokens'}); 

在创buildtesting数据时,在调用User.login之前,您应该等待User.create完成。 (Rember,Node.js是asynchronous的。)

 User.create( {username: 'timbo', email: 'test@gmail.com', password: 'monkey123'}, function(err, user) { // TODO: handle err != null User.login( {username: 'timbo', password: 'monkey123'}, function(err, accesstoken) { console.log("This is the token: " + accesstoken); }); });