在loopbackjs应用程序上注册新用户

时间:2018-03-22 04:34:18

标签: node.js loopbackjs

我已经检查了这个问题。但答案并不完全符合我的要求。 Extend built-in User model to support more properties and behaviors in loopback

我想做什么: 在我的测试应用程序上注册一个新用户。我点击注册时只需要将数据保存到mysql数据库。注册新用户的环回文档中的大多数示例都来自启动脚本。此处的示例不会将其保存到数据库 - https://github.com/strongloop/loopback-example-user-management。这就是为什么我无法将其保存到数据库而不是寄存器或用户模型上的问题。但是模型userAccount从用户基础模型扩展而来。所以我不确定这是否有效。我仍然不完全熟悉Loopback框架,所以非常感谢任何帮助。感谢。

背景 在NodeJS 8.1.0中使用loopback 3.0。使用的连接器 - loopback-connector-mysql连接到Azure上托管的MySQL数据库。

使用loopback创建的POST / userAccounts(默认API端点)可以连接到数据库并保存用户。我只是遇到了远程方法POST / register的问题。

问题 我找不到函数错误。截图 - Screenshot of error

/server/model.config

{
  "_meta": {
    "sources": [
      "loopback/common/models",
      "loopback/server/models",
      "../common/models",
      "./models"
    ],
    "mixins": [
      "loopback/common/mixins",
      "loopback/server/mixins",
      "../common/mixins",
      "./mixins"
    ]
  },
  "User": {
    "dataSource": "db",
    "public": false
  },
  "AccessToken": {
    "dataSource": "db",
    "public": false
  },
  "userCredential": {
    "dataSource": "db",
    "public": false
  },
  "userIdentity": {
    "dataSource": "db",
    "public": false
  },
  "ACL": {
    "dataSource": "db",
    "public": false
  },
  "RoleMapping": {
    "dataSource": "db",
    "public": false,
    "options": {
      "strictObjectIDCoercion": true
    }
  },
  "Role": {
    "dataSource": "db",
    "public": false
  },
  "userAccount": {
    "dataSource": "mysqlDB",
    "public": true,
    "options": {
      "remoting": {
        "sharedMethods": {
          "*": true
        }
      }
    }
  },
  "job": {
    "dataSource": "db",
    "public": true
  },
  "jobSeekerProfile": {
    "dataSource": "db",
    "public": true
  },
  "userRegister":{
    "dataSource":null,
    "public":false
  }
}

/server/models/userAccount.json

{
  "name": "userAccount",
  "base": "User",
  "idInjection": true,
  "options": {
    "validateUpsert": true
  },
  "properties": {
    "username": {
      "type": "string",
      "required": true
    },
    "password": {
      "type": "string",
      "required": true
    }
  },
  "validations": [],
  "relations": {},
  "acls": [],
  "methods": {
    "register": {
      "accepts": {
        "arg": "profile",
        "type": "userRegister",
        "description": "User profile details",
        "required": true,
        "http": {
          "source": "body"
        }
      },
      "returns": {
        "arg": "result",
        "type": "object",
        "root": true,
        "description": "This method indicates user registration status."
      },
      "description": "Register new user",
      "http": {
        "verb": "post"
      }
    }
  }
}

/server/models/userAccount.js

'use strict';

module.exports = function(usersHR) {
  class userAccount {
    async register(userRegister, req, callback) {
      var today = new Date();
      var newUserAccount = new userAccount({
        username: userRegister.username,
        password: userRegister.password,
        joinDate: today.toUTCString(),
        lastLogin: today.toUTCString(),
        realm: 'jobseeker',
        email: userRegister.email,
      });
      userAccount.save(newUserAccount, function(err) {
        if (err) {
          console.log(err);
        } else {
          console.log('User registered');
        }
      });

      callback(null, 'Registered');
    }
  }

  var cUserAccount = new userAccount(usersHR);

  usersHR.register = function() {
    cUserAccount.register(...arguments);
  };
};

/common/models/userRegister.json

{
  "name": "userRegister",
  "properties": {
    "username": {
      "type": "string",
      "description" : "username of user"
    },
    "email":{
      "type":"string",
      "description":"email of user"
    },
    "password": {
      "type": "string",
      "description" : "password of user"
    },
    "realm":{
      "type":"string",
      "description":"realm of user"
    }
  },
  "hidden": [
    "id"
  ]
}

1 个答案:

答案 0 :(得分:0)

  

我要做的是:在我的测试应用程序上注册一个新用户。一世   我点击注册时只需要将数据保存到mysql数据库。

默认User模型允许$everyone创建用户模型。这意味着创建用户的最简单行为是post/api/Users/create

  

环回文档中的大多数示例都注册了新的   user,来自启动脚本。这里的例子不保存它   数据库 -   https://github.com/strongloop/loopback-example-user-management

这是因为连接器是内存中连接器,您可以交换任何持久数据源,用户可以保留。

  

此   更难以解释为什么我无法将其保存到数据库中   与寄存器或用户模型无关。但是模型userAccount   从用户基础模型扩展。所以我不确定这是否有效   不同。我还不完全熟悉Loopback   框架,所以任何帮助都非常感谢。感谢。

要解决您的错误,您在save(您在函数中创建的类)上调用userAccount方法,您可能希望在usersHR上调用它。

旧:

userAccount.save(newUserAccount, function(err) {
        if (err) {
          console.log(err);
        } else {
          console.log('User registered');
        }
      });

新:

usersHR.save(newUserAccount, function(err) {
        if (err) {
          console.log(err);
        } else {
          console.log('User registered');
        }
      });