我们如何使用 express 在 nodeJS 中实现管理面板?
How can we implement an admin panel in nodeJS with express?
我正在使用 nodeJS 和 express 制作一个 Portfolio 应用程序。我想实现一个管理面板,我可以创建、删除、更新和编辑我的技能、经验等,但我不知道如何保密这些管理路由以及对 make.If 的身份验证类型我们可以通过在 post、补丁、删除路由上放置基本身份验证来实现,那么我们将如何在路由上实现基本身份验证。
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)
});
skill.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;
用于检测登录用户是否为管理员的中间件?
本例中通过邮箱查看,可以将adminmail保存为全局变量
ensureAdmin: function(req, res, next) {
if (req.isAuthenticated()) {
if (req.user.email === adminemail) {
return next();
} else {
return res.redirect('/adminsecretroute');
}
}
res.redirect('/');
}
按照评论中的说明,我会稍微重构一下你的代码,看起来很乱,而且你在导入路由的每一行都在重复自己,所以,你也应该做得更好......
在您的 /routers
文件夹中有一个 index.js
文件,其中包含其他 Whosebug 问题 demo repo I've made 的内容
然后,为了分开事物,我会做类似的事情:
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/*
中拥有一条受保护的路线,而其他所有路线都是正常路线
我正在使用 nodeJS 和 express 制作一个 Portfolio 应用程序。我想实现一个管理面板,我可以创建、删除、更新和编辑我的技能、经验等,但我不知道如何保密这些管理路由以及对 make.If 的身份验证类型我们可以通过在 post、补丁、删除路由上放置基本身份验证来实现,那么我们将如何在路由上实现基本身份验证。
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)
});
skill.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;
用于检测登录用户是否为管理员的中间件?
本例中通过邮箱查看,可以将adminmail保存为全局变量
ensureAdmin: function(req, res, next) {
if (req.isAuthenticated()) {
if (req.user.email === adminemail) {
return next();
} else {
return res.redirect('/adminsecretroute');
}
}
res.redirect('/');
}
按照评论中的说明,我会稍微重构一下你的代码,看起来很乱,而且你在导入路由的每一行都在重复自己,所以,你也应该做得更好......
在您的 /routers
文件夹中有一个 index.js
文件,其中包含其他 Whosebug 问题 demo repo I've made 的内容
然后,为了分开事物,我会做类似的事情:
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/*
中拥有一条受保护的路线,而其他所有路线都是正常路线