後端實作:Header 上的公司名稱判斷問題 === 修改公司名稱 Debug 流程圖1 --- where is the issue: ```flow st=>start: 開始 e=>end: 結束 op=>operation: /admin/company op2=>operation: 公司顯示名稱修改 cond=>condition: header? cond2=>condition: ajax? op3=>operation: other ajax st->op->op2->cond op3->e cond(yes)->e cond(no)->cond2 cond2(yes)->e cond2(no)->op3 ``` ==:pushpin:fix ajax 沒 error 但 fail 後,仍 set company displayname 的 cookie== --- ### commit id: ab5470649ab3d6f5940013a51936d40ff5399e56 error === [updateCompanyByCid] Calling Company_upsert_put_Companies failed; ``` { name: 'DynogelsUpdateError', status: 500, message: 'Schema validation error while updating item in table 104Pro_Company: {"update":{"0":{"message":"\\"IsTesting\\" is not allowed","path":["IsTesting"],"type":"object.allowUnknown","context":{"child":"IsTesting","key":"IsTesting","label":"IsTesting"}},"1":{"message":"\\"Tags\\" is not allowed","path":["Tags"],"type":"object.allowUnknown","context":{"child":"Tags","key":"Tags","label":"Tags"}}}}', detail: { update: { '0': [Object], '1': [Object] } }, stack: 'DynogelsUpdateError: Schema validation error while updating item in table 104Pro_Company: {"update":{"0":{"message":"\\"IsTesting\\" is not allowed","path":["IsTesting"],"type":"object.allowUnknown","context":{"child":"IsTesting","key":"IsTesting","label":"IsTesting"}},"1":{"message":"\\"Tags\\" is not allowed","path":["Tags"],"type":"object.allowUnknown","context":{"child":"Tags","key":"Tags","label":"Tags"}}}}\n at module.exports.Table.update (/opt/platform_ds-334/node_modules/dynogels/lib/table.js:300:30)\n at Function.wrapper [as update] (/opt/platform_ds-334/node_modules/dynogels/node_modules/lodash/lodash.js:4968:19)\n at DynamoDB.updateAttributes (/opt/platform_ds-334/_support/loopback-connector-dynamodb/lib/dynamodb.js:1302:11)\n at invokeConnectorMethod (/opt/platform_ds-334/node_modules/loopback-datasource-juggler/lib/dao.js:172:21)\n at /opt/platform_ds-334/node_modules/loopback-datasource-juggler/lib/dao.js:2938:15\n at doNotify (/opt/platform_ds-334/node_modules/loopback-datasource-juggler/lib/observer.js:155:49)\n at doNotify (/opt/platform_ds-334/node_modules/loopback-datasource-juggler/lib/observer.js:155:49)\n at doNotify (/opt/platform_ds-334/node_modules/loopback-datasource-juggler/lib/observer.js:155:49)\n at doNotify (/opt/platform_ds-334/node_modules/loopback-datasource-juggler/lib/observer.js:155:49)\n at Function.ObserverMixin._notifyBaseObservers (/opt/platform_ds-334/node_modules/loopback-datasource-juggler/lib/observer.js:178:5)\n at Function.ObserverMixin.notifyObserversOf (/opt/platform_ds-334/node_modules/loopback-datasource-juggler/lib/observer.js:153:8)\n at Function.ObserverMixin._notifyBaseObservers (/opt/platform_ds-334/node_modules/loopback-datasource-juggler/lib/observer.js:176:15)\n at Function.ObserverMixin.notifyObserversOf (/opt/platform_ds-334/node_modules/loopback-datasource-juggler/lib/observer.js:153:8)\n at Function.ObserverMixin._notifyBaseObservers (/opt/platform_ds-334/node_modules/loopback-datasource-juggler/lib/observer.js:176:15)\n at Function.ObserverMixin.notifyObserversOf (/opt/platform_ds-334/node_modules/loopback-datasource-juggler/lib/observer.js:153:8)\n at Function.ObserverMixin._notifyBaseObservers (/opt/platform_ds-334/node_modules/loopback-datasource-juggler/lib/observer.js:176:15)' } ``` but refresh page: req.user.company displayName 蘭XXXXXXX______股份有限公司 登出再登入後, req.user.company displayName 蘭XXXXXXX股份有限公司 *** ## ==:pushpin:next issue: companyService.updateCompanyByCid== * company ``` { cid: '7505', pro: 'Pro', invoice: '80688092', name: '環XXXXXXX股份有限公司', searchKey: '80688092_80688092000_undefined_環XXXXXXX股份有限公司', displayName: '蘭XXXXXXX__股份有限公司', area: 6001003001, address: '民XXXXXXX8巷6號4樓', industryCategory: 1003002013, empCount: '12', capital: '100000', principal: '江素芬', isOpen: 0, isPay: 1, payDate: 1532077572586, vipCustNo: '80688092000', mdmKey: '1112191966', erpCustNo: '1112191966', createDate: 1470317860000, updateDate: 1545123776537, isTesting: true, tags: [ '1', '2', '27' ], phonearea: '', phone: '', faxarea: '', fax: '' } ``` * 印convertObjectToUpperCamel(company) ``` { "Cid": "7505", "Pro": "Pro", "Invoice": "80688092", "Name": "環XXXXXXX股份有限公司", "SearchKey": "80688092_80688092000_undefined_環XXXXXXX股份有限公司", "DisplayName": "蘭XXXXXXX__股份有限公司", "Area": 6001003001, "Address": "民XXXXXXX8巷6號4樓", "IndustryCategory": 1003002013, "EmpCount": "12", "Capital": "100000", "Principal": "江素芬", "IsOpen": 0, "IsPay": 1, "PayDate": 1532077572586, "VipCustNo": "80688092000", "MdmKey": "1112191966", "ErpCustNo": "1112191966", "CreateDate": 1470317860000, "UpdateDate": 1545123776537, "IsTesting": true, "Tags": [ "1", "2", "27" ], "Phonearea": "", "Phone": "", "Faxarea": "", "Fax": "" } ``` 修改公司名稱 Debug 流程圖2 --- where is the issue: ```flow st=>start: 開始 e=>end: 結束 op=>operation: /admin/company op2=>operation: 公司顯示名稱修改 cond=>condition: DS ajax? st->op->op2->cond cond(yes)->e cond(no)->op2 ``` below TODO: DS ajax find one and test result. http://172.19.7.155:3080/explorer server/services/impl/company-service.js > module.exports.updateCompanyByCid > ==app.DataService.Company_upsert_put_Companies== 進DS `modules/doc/api-def.yml` 檔案 搜尋關鍵字 `Company upsert` ![](https://i.imgur.com/YE8odmt.png) 其中一個operationId有match,而且是put 再使用其summary 回去 http://172.19.7.155:3080/explorer 的company分類找put的: ![](https://i.imgur.com/04E62gd.png) 就找到了 重新送出後結果一樣:"Schema validation error while updating item in table 104Pro_Company" ``` { "error": { "name": "DynogelsUpdateError", "status": 500, "message": "Schema validation error while updating item in table 104Pro_Company: {\"update\":{\"0\":{\"message\":\"\\\"IsTesting\\\" is not allowed\",\"path\":[\"IsTesting\"],\"type\":\"object.allowUnknown\",\"context\":{\"child\":\"IsTesting\",\"key\":\"IsTesting\",\"label\":\"IsTesting\"}},\"1\":{\"message\":\"\\\"Tags\\\" is not allowed\",\"path\":[\"Tags\"],\"type\":\"object.allowUnknown\",\"context\":{\"child\":\"Tags\",\"key\":\"Tags\",\"label\":\"Tags\"}}}}", "detail": { "update": { "0": { "message": "\"IsTesting\" is not allowed", "path": [ "IsTesting" ], "type": "object.allowUnknown", "context": { "child": "IsTesting", "key": "IsTesting", "label": "IsTesting" } }, "1": { "message": "\"Tags\" is not allowed", "path": [ "Tags" ], "type": "object.allowUnknown", "context": { "child": "Tags", "key": "Tags", "label": "Tags" } } } }, "stack": "DynogelsUpdateError: Schema validation error while updating item in table 104Pro_Company: {\"update\":{\"0\":{\"message\":\"\\\"IsTesting\\\" is not allowed\",\"path\":[\"IsTesting\"],\"type\":\"object.allowUnknown\",\"context\":{\"child\":\"IsTesting\",\"key\":\"IsTesting\",\"label\":\"IsTesting\"}},\"1\":{\"message\":\"\\\"Tags\\\" is not allowed\",\"path\":[\"Tags\"],\"type\":\"object.allowUnknown\",\"context\":{\"child\":\"Tags\",\"key\":\"Tags\",\"label\":\"Tags\"}}}}\n at module.exports.Table.update (/opt/platform_ds-334/node_modules/dynogels/lib/table.js:300:30)\n at Function.wrapper [as update] (/opt/platform_ds-334/node_modules/dynogels/node_modules/lodash/lodash.js:4968:19)\n at DynamoDB.updateAttributes (/opt/platform_ds-334/_support/loopback-connector-dynamodb/lib/dynamodb.js:1302:11)\n at invokeConnectorMethod (/opt/platform_ds-334/node_modules/loopback-datasource-juggler/lib/dao.js:172:21)\n at /opt/platform_ds-334/node_modules/loopback-datasource-juggler/lib/dao.js:2938:15\n at doNotify (/opt/platform_ds-334/node_modules/loopback-datasource-juggler/lib/observer.js:155:49)\n at doNotify (/opt/platform_ds-334/node_modules/loopback-datasource-juggler/lib/observer.js:155:49)\n at doNotify (/opt/platform_ds-334/node_modules/loopback-datasource-juggler/lib/observer.js:155:49)\n at doNotify (/opt/platform_ds-334/node_modules/loopback-datasource-juggler/lib/observer.js:155:49)\n at Function.ObserverMixin._notifyBaseObservers (/opt/platform_ds-334/node_modules/loopback-datasource-juggler/lib/observer.js:178:5)\n at Function.ObserverMixin.notifyObserversOf (/opt/platform_ds-334/node_modules/loopback-datasource-juggler/lib/observer.js:153:8)\n at Function.ObserverMixin._notifyBaseObservers (/opt/platform_ds-334/node_modules/loopback-datasource-juggler/lib/observer.js:176:15)\n at Function.ObserverMixin.notifyObserversOf (/opt/platform_ds-334/node_modules/loopback-datasource-juggler/lib/observer.js:153:8)\n at Function.ObserverMixin._notifyBaseObservers (/opt/platform_ds-334/node_modules/loopback-datasource-juggler/lib/observer.js:176:15)\n at Function.ObserverMixin.notifyObserversOf (/opt/platform_ds-334/node_modules/loopback-datasource-juggler/lib/observer.js:153:8)\n at Function.ObserverMixin._notifyBaseObservers (/opt/platform_ds-334/node_modules/loopback-datasource-juggler/lib/observer.js:176:15)" } } ``` 使用 `104Pro_Company` 去 DS 搜尋後得他設定好的格式 經比對後,傳入以下值即回傳 200 ``` { "Cid": "7505", "Pro": "Pro", "Invoice": "80688092", "Name": "環XXXXXXX股份有限公司", "SearchKey": "80688092_80688092000_undefined_環XXXXXXX股份有限公司", "DisplayName": "蘭XXXXXXX__股份有限公司", "Area": 6001003001, "Address": "民XXXXXXX8巷6號4樓", "IndustryCategory": 1003002013, "EmpCount": 12, "Capital": 100000, "Principal": "江素芬", "IsOpen": 0, "IsPay": 1, "PayDate": 1532077572586, "VipCustNo": "80688092000", "MdmKey": "1112191966", "ErpCustNo": "1112191966", "CreateDate": 1470317860000, "UpdateDate": 1545123776537, "Phonearea": "", "Phone": "", "Faxarea": "", "Fax": "" } ``` 後來去 DS ``` server/models/company_new.json ``` schema新增值: ``` "Tags": { "type": "array", "required": false, "description": "Tags" }, "IsTesting": { "type": "boolean", "required": false, "description": "新公司測試" } ``` 然後再送出平台原本的 json 就可以了。