首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在nodeJS中使用express实现管理面板?

如何在nodeJS中使用express实现管理面板?
EN

Stack Overflow用户
提问于 2020-04-19 22:39:25
回答 2查看 1.4K关注 0票数 1

我正在用nodeJS和express制作一个投资组合应用程序。我想要实现一个管理面板,我可以创建、删除、更新和编辑我的技能、经验等,但我不知道如何将这些管理路线保密,以及通过在post、修补、删除路由上放置基本身份验证,我们可以对make.If进行什么样的身份验证,然后我们将如何在路由上实现基本身份验证。

index.js

代码语言:javascript
复制
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)
});

skill.js

代码语言:javascript
复制
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;
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-19 23:24:36

正如注释中所指出的,我会稍微重构一下您的代码,看起来很麻烦,而且您在重复您导入的每一行路由,所以,您也应该做得更好.

在您的index.js文件夹中有一个/routers文件,其中包含其他StackOverflow问题的我做的演示回购内容

然后,为了把事情分开,我会做这样的事情:

代码语言:javascript
复制
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/*中拥有一个受保护的路由,并为其他所有东西提供正常路由。

票数 2
EN

Stack Overflow用户

发布于 2020-04-19 23:12:48

一个中间件,您在其中检测记录的用户是否是管理员?

在本示例中,通过电子邮件进行检查,您可以将adminemail保存为全局变量。

代码语言:javascript
复制
ensureAdmin: function(req, res, next) {
    if (req.isAuthenticated()) {
      if (req.user.email === adminemail) {
        return next();
      } else {
        return res.redirect('/adminsecretroute');
      }
    }
    res.redirect('/');
  }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61312575

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档