當在開發nodejs 程式 規模越來越大時
功能可能就被切割到多個function內
各階段的錯誤處理 有統一標準的作法
會便於建立標準的工作流程
整理一下關於錯誤的處理的注意要點
1.完全不處理 系統會自動以throw將錯誤丟出
2.若要對error資訊做處理或是加工 錯誤資訊
請用try catch包起來
3.丟出錯誤 請統一用Error物件丟出
catch攔截到的一定是Error物件
發生錯誤自動throw出去的也一定是Error物件
4.當使用catch攔截到error物件處理後
若寫了catch攔截錯誤
在catch內執行throw將錯誤往外丟
否則程式會繼續往下走
5.自訂Error物件
e= new Error('messagxxxxxe') 可透過e.message 取得資訊
系統throw出的錯誤訊息都會是在e.message
若要加入自訂的資料屬性可以用 ex: e.info = sql ..
Error物件屬性只有message是通用跨browser通用
6.系統已經加上error 處理的middleware
若錯誤沒有被處理回到route上
會被error handler接收
參考Error物件
2019年12月31日 星期二
2019年12月24日 星期二
supertest server執行時間過長 timeout問題排除
supertest 做api 的route測試
通常會在before內建立連線
再交由後續it進行測試
建立連線的過程
通常可能會是
const server = app.listen(5000,...)
api = supertest(server)
產生api 物件做後續的測試
如果產生server時間過長 (預設限制是2000ms)
則會因timeout而讓測試無法進行
在執行 mocha時 可以透過設定 加長timeout的時間
mocha --timeout 5000
通常會在before內建立連線
再交由後續it進行測試
建立連線的過程
通常可能會是
const server = app.listen(5000,...)
api = supertest(server)
產生api 物件做後續的測試
如果產生server時間過長 (預設限制是2000ms)
則會因timeout而讓測試無法進行
在執行 mocha時 可以透過設定 加長timeout的時間
mocha --timeout 5000
2019年12月2日 星期一
mongodb建立使用者錯誤 Error: couldn't add user: Use of SCRAM-SHA-256 requires undigested passwords
mongo db 預設是不需要密碼連線的
要使用密碼連線須 先建立使用者帳號
原本3.x版建立使用者
在4.x版後會有錯誤發生
須加上宣告密碼encode方式
要使用密碼連線須 先建立使用者帳號
原本3.x版建立使用者
db.createUser(
{
user: "ozzysun",
pwd: "xxxx",
roles: [{ role: "root", db: "admin" }]
})
在4.x版後會有錯誤發生
須加上宣告密碼encode方式
db.createUser(
{
user: "ozzysun",
pwd: "xxx",
roles: [{ role: "root", db: "admin" }],
mechanisms:[
"SCRAM-SHA-1"
]
})
2019年11月29日 星期五
nginx 設定提供不同版本api使用
目前提供給外部使用的API Server均透過nginx
以 location /api proxy到 nodejs 的服務上
為了要提供全新架構的api 服務
將以v1,v2區分新舊版本server
以下是nginxg上設定範例
以 location /api proxy到 nodejs 的服務上
為了要提供全新架構的api 服務
將以v1,v2區分新舊版本server
以下是nginxg上設定範例
location ^~ /api {
rewrite ^/api(/.*)$ $1 break;
#若要改預設主機 改這裡即可
proxy_pass http://api_server_v1;
}
location ^~ /api/v1 {
rewrite ^/api/v1(/.*)$ $1 break;
proxy_pass http://api_server_v1;
}
location ^~ /api/v2 {
rewrite ^/api/v2(/.*)$ $1 break;
proxy_pass http://api_server_v2;
}
upstream api_server_v1 {
server 127.0.0.1:12345;
}
upstream api_server_v2 {
server 127.0.0.1:3138;
}
設定的結果
http://localhost/api/xxx 會導到v1主機
http://localhost/api/v1/xxx 會導到v1主機
http://localhost/api/v2/xxx 會導到v2主機
2019年11月28日 星期四
Linux上 cordova 9 plugin問題紀錄
在linux上build cordova app 使用plugin時遇到的幾個問題處理紀錄一下
1.Error:Using "requireCordovaModule" to load non-cordova module
發生在ios 的plugin上
只要將context.requireCordovaModule 改require即可
2.There was a conflict trying to modify attributes with
plugin要改寫AndroidMenifest時,寫入時間點互相沖到
導致未異動到AndroidMenifest
可以使用--force 強制安裝
cordova plugin add xxx --force
之後把安裝有問題的plugin移除 重新安裝即可
1.Error:Using "requireCordovaModule" to load non-cordova module
發生在ios 的plugin上
只要將context.requireCordovaModule 改require即可
2.There was a conflict trying to modify attributes with
plugin要改寫AndroidMenifest時,寫入時間點互相沖到
導致未異動到AndroidMenifest
可以使用--force 強制安裝
cordova plugin add xxx --force
之後把安裝有問題的plugin移除 重新安裝即可
訂閱:
文章 (Atom)