<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # **創建router** router文件夾下創建 UserRouer.js ``` const express = require("express"); const router = express.Router(); const UserController = require("../controllers/UserController"); // 引入controller router.post("/user/login", UserController.login); // 登錄 router.get("/user/logout", UserController.logout);// 登出 module.exports = router; ``` 在app.js中引入路由 ``` const UserRouter = require("./routes/UserRouter"); app.use(UserRouter); ``` # **創建controller** 創建controllers文件夾 創建UserController.js文件 ``` const UserServices = require("../services/UserService"); //引入 service const jwt = require("../util/JWT"); // 引入jsonwebtoken -- token const UserController = { login: async (req, res) => { const result = await UserServices.login(req.body); // 登錄驗證賬號,返回數組 if (result.length == 0) {// 沒找到對應賬號 // 返回錯誤 res.send({ code: 401, msg: "用戶名或密碼不匹配" }); return; } // 組裝返回前端項目json數據 let data = { ...result[0]._doc, id: result[0]._id, aaa: 12, }; // 創建token const token = jwt.generate( { name: data.username, id: data.id, }, "7d" ); // 設置響應頭 授權token res.header("Authorization", `Bearer ${token}`); // 返回給前端數據 res.send({ code: 200, msg: "登錄成功", data: { ...data } }); }, logout: (req, res) => { res.send({ code: 200, msg: "退出成功" }); }, }; module.exports = UserController; ``` # **創建service** 創建services文件夾 創建UserService.js文件 ``` const UserModel = require("../modules/UserModel"); // 引入mongoDb 模塊 const UserService = { login: async ({ username, password }) => { return UserModel.find({// 查詢數據庫 username, password, }); }, }; module.exports = UserService; ``` # **創建modules** 創建modules文件夾 創建UserModule.js文件 ``` const mongoose = require("mongoose");// 調用mongoose const Schema = mongoose.Schema; const UserType = {// 數據格式 username: String, password: String, gender: Number, // 性別, 0,1,2 instanceof: String, avatar: String, role: Number, }; const UserModel = mongoose.model("user", new Schema(UserType, { timestamps: true, // 自動添加創建時間和修改時間字段 })); module.exports = UserModel; ``` # **創建 config** 創建config文件夾 創建db.config.js文件 ``` const mongoose = require("mongoose"); mongoose.connect("mongodb://127.0.0.1:27017/nodeceshi");// 鏈接本地mongodb數據庫 ``` 在bin/www中引入db.config.js ``` require("../config/db.config"); ``` # **創建 JWT** 創建util文件夾 創建JWT.js文件 ``` const jsonwebtoken = require("jsonwebtoken"); // 引入jsonwentoken const secret = "your_secret_key"; // 秘鑰 const JWT = { generate(value, expires) { // 創建token return jsonwebtoken.sign(value, secret, { expiresIn: expires }); }, verify(token) {// 驗證token try { return jsonwebtoken.verify(token, secret); } catch { return false; } }, }; module.exports = JWT; ``` 在app.js中引入jwt,創建中間件驗證接口token是否過去 ``` const jwt = require("./util/JWT");// 引入 app.use((req, res, next) => {//創建中間件 const Whitelist = ["/admin/user/login"]; // 不參與檢查token的白名單,例如登錄接口 if (Whitelist.includes(req.url)) { next(); return; } const token = req.headers.authorization.split(" ")[1]; // 截取請求頭中的token const payload = jwt.verify(token);// 驗證token if (payload) { // 通過后創建新的token const newToken = jwt.generate( { name: payload.name, id: payload.id, }, "7d" ); // 重新設置響應頭token res.header("Authorization", `Bearer ${newToken}`); // 繼續 next(); return; } // 返回token過期,前端通過接口狀態401做處理 res.status(401).send({ msg: "token過期" }); }); ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看