node.js - 使用中间件表达静态需要登录
问题描述
我创建了两个上传文件夹,分别是公共的和私有的。公共文件夹不需要身份验证,但私有文件夹需要中间件才能访问;
app.use('/uploads', express.static('uploads/public/'));
app.use('/uploads', require('./admin/routers/api/accessPrivate'), express.static('uploads/private/'));
这是我的accessPrivate
const userPermission = require("../../middleware/permission");
const auth = require('../../middleware/auth');
const accessMedia = async ( req, res, next) => {
await auth(req, res, next);
next();
};
module.exports = accessMedia;
但它显示错误:“没有令牌”。这意味着没有req
发送到服务器的标头;你能告诉我怎么做吗?
太感谢了;
解决方案
uploads
为所有请求定义一个通用中间件。检查用户的权限。
app.use('/uploads', async (req, res, next) => {
let hasAccess = await auth(req, res, next);
if (hasAccess) {
app.use(express.static('uploads/private/'));
}
else {
app.use(express.static('uploads/public/'));
}
next();
});
// your routes
app.use('*', function (req, res, next) {
let target = 'index.html';
if (req.baseUrl && req.baseUrl != '/') {
target = req.baseUrl;
}
if(req.user) {
root = 'uploads/private/';
}
else {
root = 'uploads/public/';
}
res.sendFile(target, { root: root })
});
此外,您应该更改auth
实现。
推荐阅读
- r - R子集特定值也返回NA?
- javascript - webgl 试图画一个三角形
- c# - 没有角色的自定义用户权限 c#
- node.js - 如何使用nodejs将数据数组转换为合并的html表
- c++ - GCC、CMake、预编译头文件和维护依赖项
- c# - 无法打开运行 exe 生成的输出文件
- r - tagAssert(body, type = "div", class = "content-wrapper") 中的错误:缺少参数“body”,没有默认值
- c - [C]:使用 strcpy() 到字符串数组的分段错误
- angular - 当用户点击它时,用其中的新元素展开 li
- php - 日本货币格式以提高可读性