簡體   English   中英

我們如何使用 express 在 nodeJS 中實現管理面板?

[英]How can we implement an admin panel in nodeJS with express?

我正在用 nodeJS 和 express 制作一個 Portfolio 應用程序。 我想實現一個管理面板,我可以創建、刪除、更新和編輯我的技能、經驗、關於等,但我不知道如何將這些管理路由保密以及進行什么樣的身份驗證。如果我們可以通過將基本身份驗證放在 post、patch、delete 路由上,那么我們將如何在路由上實現基本身份驗證。

index.js

const express = require('express');
const app = express();
var cors = require('cors');

require('./db/mongoose')
const menuRouter = require('./routers/menu')
const skillRouter = require('./routers/skill')
const aboutRouter = require('./routers/About')
const experienceRouter = require('./routers/Experience')
const resumerouter = require('./routers/Resume')
const userRouter = require('./routers/user')
const port = process.env.PORT || 4000;
app.use(express.json());
app.use(cors());

app.use(menuRouter);
app.use(skillRouter);
app.use(aboutRouter);
app.use(experienceRouter);
app.use(resumerouter);
app.use(userRouter)
app.listen(port, () => {
    console.log("Server is runing on port" + port)
});

技能.js

const express = require('express');
const Skill = require('../model/skill');
const router = new express.Router();
router.post('/skill', async (req, res) => {
    const skill = new Skill(req.body);

    try {
        await skill.save();
        res.status(201).send(skill);
    } catch (e) {
        console.log(e);
        res.status(400).send(e);
    }

})
router.get('/skill', async (rq, res) => {

    try {
        const skill = await Skill.find({});
        res.status(201).send(skill);
    } catch (e) {
        res.status(400).send(e);
    }


})

module.exports = router;

正如評論中所指定的,我會稍微重構你的代碼,看起來很亂,而且你在導入路由的每一行都在重復自己,所以,你也應該做得更好......

/routers文件夾中有一個index.js文件,其中包含我為其他 StackOverflow 問題制作的演示倉庫的內容

然后,為了分開事情,我會做類似的事情:

const routes = require('./routes')
...
const protectRouteWithApiKey = (req, res, next) => {
    const auth = req.headers['x-apikey']
    if (auth && auth === '<YOUR API KEY>') return next()
    return next(new Error('403 | Authorization is missing or value is wrong'))
}
...
app.use('/api', protectRouteWithApiKey, routes) // point to your routes and protect access
app.use('/', defaultEngine) // your engine to render html

然后,您將在/api/*中擁有一條受保護的路線,而其他一切的正常路線

檢測登錄用戶是否為管理員的中間件?

在這個由 email 檢查的示例中,您可以將 adminemail 保存為全局變量

ensureAdmin: function(req, res, next) {
    if (req.isAuthenticated()) {
      if (req.user.email === adminemail) {
        return next();
      } else {
        return res.redirect('/adminsecretroute');
      }
    }
    res.redirect('/');
  }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM