Node.js 带有中间件的Express static需要登录

Node.js 带有中间件的Express static需要登录,node.js,express,Node.js,Express,我创建了两个上传文件夹,分别是public和private。公用文件夹不需要身份验证,但专用文件夹需要中间件才能访问 app.use('/uploads', express.static('uploads/public/')); app.use('/uploads', require('./admin/routers/api/accessPrivate'), express.static('uploads/private/')); 这是我的私人物品 但它显示错误:没有令牌。这意味着没有向服务器

我创建了两个上传文件夹,分别是public和private。公用文件夹不需要身份验证,但专用文件夹需要中间件才能访问

app.use('/uploads', express.static('uploads/public/'));
app.use('/uploads', require('./admin/routers/api/accessPrivate'), express.static('uploads/private/'));
这是我的私人物品

但它显示错误:没有令牌。这意味着没有向服务器发送req报头;你能告诉我怎么做吗


多谢各位,

为所有上传请求定义通用中间件。检查用户的权限

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实现。

谢谢您的回答,但请遵照您的建议。它不是一个中间件,即使您将express.static设置为“uploads/public/”;在app.use内部,它也不工作。它不提供静态文件@海蒂恩希·赛义德。作为您的方法,它返回无法获取文件。它看起来像get方法,不提供静态文件。你能试试我更新的答案吗?它只是为了在客户端获取文件,而不是上传文件的目标路径@HaiTienI添加缺少的目标,此代码是我的simple express服务器的一部分,请在@HaiTien中检查整个代码
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 })
});