nodejs 近期所遇到的問題及解決

一寸灰_du發表於2020-12-13

1、unique: true引起報錯

用此方法設定唯一約束會引起node報錯,解決方式如下:

unique: 'userName'

2、介面中的時間處理,時間偏移+格式化

loginDate: {
    type: DataTypes.DATE,
        get() {
            return moment(this.getDataValue('loginDate')).utcOffset(8).format('YYYY-MM-DD HH:mm:ss');
        }
    },

3、請求攜帶token

使用axios中的請求攔截器進行攜帶

axios.interceptors.request.use(
  function(config) {
    // 在傳送請求之前做些什麼
    // 1. 傳送請求時,如果有token,則附帶到請求頭中去
    const token = localStorage.getItem("token");
    if (token) {
      config.headers.Authorization ="bearer " + token; 
    }
    return config;
  },
  function(error) {
    // 對請求錯誤做些什麼
    return Promise.reject(error);
  }
);

4、token過期時間實時監控

在axios的響應攔截器中進行監控,具體程式碼如下:

axios.interceptors.response.use(
  resp => {
  // 在請求響應之後做些什麼
  // 2. 響應結果如果有token,儲存token到本地
    if (resp.headers.authorization) {
    localStorage.setItem("token", resp.headers.authorization)
    }
    return resp;
  }, err => {
    // 3. 相應的時候,如果響應訊息碼是403(沒有token,token失效),則在本地刪除token
    if (err.response.status === 403) {
      localStorage.removeItem("token");
      router.push("/login");
    }
    return Promise.reject(err);
});

5、頁面渲染落後於vueX的資料時

直接將資料動態設定到vuex中,具體程式碼如下:

<div class="welcome">
    <i class="el-icon-user"></i>
    歡迎登入,{{ this.$store.state.loginUser.data.userName }}
</div>

6、系統的管理員架構問題

超級管理員:只有一個,擁有檢視所有資料,修改所有資料的許可權,不可刪除和禁用自己

高階管理員:通過超級管理員開啟高階許可權,可擁有查詢所有資料,修改所有普通管理員使用者資料的許可權,不可刪除和禁用高階管理員及以上使用者,不可檢視修改許可權列。

普通管理員:不可檢視使用者管理模組,可檢視常規資料。

7、設定跨域、跨域獲取header裡面的資訊

通過cors中介軟體實現

//設定跨域
const cors = require('cors')
app.use(cors());
//設定可以跨域獲取header裡面authorization的資訊
app.all('*', function(req, res, next) {
    res.header('Access-Control-Expose-Headers', 'Authorization');
    next();
});

相關文章