Преглед изворни кода

修改用户登录后初始化数据的验证方式

caiaolin пре 8 година
родитељ
комит
743e054e64
2 измењених фајлова са 125 додато и 38 уклоњено
  1. 2 1
      modules/users/controllers/user_controller.js
  2. 123 37
      modules/users/models/user_model.js

+ 2 - 1
modules/users/controllers/user_controller.js

@@ -53,7 +53,8 @@ class UserController {
             // 切换验证场景
             let userModel = new UserModel();
             let condition = {email: sessionUser.email};
-            let result = await userModel.updateUser(condition, updateData);
+            userModel.setScene('saveInfo');
+            let result = await userModel.updateUser(condition, updateData, 1);
 
             if (result.ok !== 1) {
                 throw '用户数据保存失败';

+ 123 - 37
modules/users/models/user_model.js

@@ -12,6 +12,13 @@ let Request = require("request");
 class UserModel {
 
     /**
+     * 表名
+     *
+     * @var {string}
+     */
+    collectionName = 'user';
+
+    /**
      * 模型
      *
      * @var {object}
@@ -19,36 +26,109 @@ class UserModel {
     model = null;
 
     /**
+     * db句柄
+     *
+     * @var {object}
+     */
+    db = null;
+
+    /**
+     * 最后选定的数据结构
+     *
+     * @var {object}
+     */
+    schema = null;
+
+    /**
+     * 企业所在地区
+     *
+     * @var {object}
+     */
+    province = ['广东省', '北京市'];
+
+    /**
+     * 企业类型
+     *
+     * @var
+     */
+    companyType = ['设计', '施工'];
+
+    /**
+     * 企业类型
+     *
+     * @var
+     */
+    companyScale = ['1-20', '20-50', '50-100', '100+'];
+
+    /**
      * 默认结构
      *
      * @var {object}
      */
     defaultSchema = {
+        username: String,
+        email: String,
+        mobile: String,
+        real_name: String,
+        company: String,
+        province: String,
+        area: Number,
+        company_type: Number,
+        company_scale: Number,
+        last_login: Number,
+        create_time: Number
+    };
+
+    /**
+     * 登录验证结构
+     *
+     * @var {object}
+     */
+    loginSchema = {
         username: {
             type: String,
+            required: true
         },
         email: {
             type: String,
+            required: true
         },
         mobile: {
             type: String,
-        },
+            required: true,
+            validate: {
+                validator: function(v) {
+                    return /^1([34578]\d)\d{8}$/.test(v);
+                },
+                message: '{VALUE} is not a valid phone number!'
+            },
+        }
+    };
+
+    /**
+     * 保存用户详情结构
+     *
+     * @var {object}
+     */
+    saveInfoSchema = {
         real_name: {
             type: String,
+            required: true
         },
         company: {
             type: String,
+            required: true
         },
         province: {
             type: String,
+            required: true
         },
         area: {
             type: Number,
+            required: true
         },
         company_type: Number,
         company_scale: Number,
-        last_login: Number,
-        create_time: Number
     };
 
     /**
@@ -57,33 +137,11 @@ class UserModel {
      * @return {void}
      */
     constructor() {
-        let umDB = dbm.getCfgConnection('scConstruct');
-        let usersSchema = new mongoose.Schema(this.defaultSchema);
-        this.model = umDB.model('users', usersSchema);
+        this.db = dbm.getCfgConnection('scConstruct');
+        this.schema = new mongoose.Schema(this.defaultSchema);
     }
 
     /**
-     * 企业所在地区
-     *
-     * @var {object}
-     */
-    province = ['广东省', '北京市'];
-
-    /**
-     * 企业类型
-     *
-     * @var
-     */
-    companyType = ['设计', '施工'];
-
-    /**
-     * 企业类型
-     *
-     * @var
-     */
-    companyScale = ['1-20', '20-50', '50-100', '100+'];
-
-    /**
      * 根据用户名密码调用SSO接口获取信息
      *
      * @param {string} username
@@ -127,11 +185,13 @@ class UserModel {
         let info = false;
         if (userDataFromDb.length <= 0) {
             // 不存在用户则入库
+            this.setScene('login');
             result = await this.addUser(userData);
         } else {
             // 存在则更新用户信息
             let updateData = {last_login: new Date().getTime()};
             let condition = {email: userData.email};
+            this.setScene('updateTime');
             result = await this.updateUser(condition, updateData);
 
             userDataFromDb = userDataFromDb[0];
@@ -143,18 +203,41 @@ class UserModel {
     }
 
     /**
+     * 选择场景
+     *
+     * @param {string} scene
+     */
+    setScene(scene = '') {
+        let schema = {};
+        switch (scene) {
+            case 'saveInfo':
+                schema = this.saveInfoSchema;
+                break;
+            case 'updateTime':
+                schema = {last_login: Number, real_name: String};
+                break;
+            case 'login':
+                schema = this.loginSchema;
+                break;
+            default:
+                schema = this.defaultSchema;
+                break;
+        }
+        this.schema = new mongoose.Schema(schema);
+    }
+
+    /**
      * 根据用户名查找数据
      *
      * @param {string} username
      * @return {object}
      */
     findDataByName(username) {
-        let self = this;
+        let userModel = this.db.model(this.collectionName, this.schema);
         return new Promise(function (resolve, reject) {
-            self.model.find({username: username}, function (error, data) {
+            userModel.find({username: username}, function (error, data) {
                 if (error) {
-                    console.log(error);
-                    reject([]);
+                    reject(error);
                 } else {
                     resolve(data);
                 }
@@ -181,7 +264,7 @@ class UserModel {
             last_login: 0,
             create_time: new Date().getTime()
         };
-        let userModel = new this.model(insertData);
+        let userModel = this.db.model(insertData, this.schema);
         return new Promise(function (resolve, reject) {
             userModel.save(function (error) {
                 if (error) {
@@ -204,12 +287,15 @@ class UserModel {
         if (Object.keys(condition).length <= 0 || Object.keys(updateData).length <= 0) {
             return null;
         }
-        let userModel = new this.model();
+        let userModel = this.db.model('users', this.schema);
+
         return new Promise(function(resolve, reject) {
-            // let validationError = userModel.validateSync();
-            // if (validationError) {
-            //     reject(validationError);
-            // }
+            // 验证数据
+            let model = new userModel(updateData);
+            let validationError = model.validateSync();
+            if (validationError) {
+                reject(validationError);
+            }
             userModel.update(condition, {$set: updateData}, function(error, result) {
                 if (error) {
                     reject(error);