nodejs之express静态资源管理(express.static)

发布时间:2019-07-02 22:57:30.087编辑:佚名阅读(672)

node做中间层,需要对http请求做反向代理,但是其中要过滤静态资源

下边是对所有静态资源处理的中间件,包括css js html img font 等

app.use('/css',express.static(path.join(__dirname, 'public')));

我们的项目需要对html 请求做权限验证,那就需要单独的一个中间件去处理html 权限验证,所以只能分开来处理

 app.use('/css',express.static(path.join(__dirname, 'public/css'))); // __dirname  当前路径, __filename 当前在执行的js文件路径
 app.use('/fonts',express.static(path.join(__dirname, 'public/fonts')));
 app.use('/images',express.static(path.join(__dirname, 'public/images')));
 app.use('/img',express.static(path.join(__dirname, 'public/img')));
 app.use('/js',express.static(path.join(__dirname, 'public/js')));

对html 的处理

if (paths.indexOf('.html') !== -1) {
          // token 验证成功,第二步 验证访问权限
          //response.writeHead(响应状态码,响应头对象): 发送一个响应头给请求。
          res.writeHead(200,{'Content-Type':'text/html'})
          // 如果url=‘/’ ,读取指定文件下的html文件,渲染到页面。
          fs.readFile(path.join(__dirname,'public'+paths),'utf-8',function(err,data){
              if(err){
                _res.send()
              }
              let cryp = new Cryp();
              // let crypData = cryp.encrypt(JSON.stringify([jwt._id, req.url])); //加密
              let crypData = JSON.stringify([jwt._id, req.url]); // 未加密
              request({
                url: baseUrl + '/api/auth/checkRequestRight',//请求路径
                method: "POST",//请求方式,默认为get
                body: crypData //post参数字符串
              }, function(error, response, body) {
                console.log('------------141-----------:' + body);
                if (!error && response.statusCode == 200) {
                  let newData = JSON.parse(cryp.decrypt(body));
                  if (newData.needLogin) {
                    // 重定向到无权限页面
                    // _res.redirect(302, '');
                    _res.send(body);
                    _res.end();
                  } else {
                    res.end(data);
                  }
                } else {
                  // 请求失败
                  // _res.redirect(302, '');
                  _res.send(response);
                  _res.end();
                }
              });
          });
        }

其中登录页面是要跳过权限验证的

// 处理登录中间件
app.use(function (req, res, next) {
  let paths = req.path;
  console.log(paths);
  // 登录页面
  if(paths.indexOf('login.html') !== -1) {
      //response.writeHead(响应状态码,响应头对象): 发送一个响应头给请求。
      res.writeHead(200,{'Content-Type':'text/html'})
      // 如果url=‘/’ ,读取指定文件下的html文件,渲染到页面。
      fs.readFile(path.join(__dirname,'public'+paths),'utf-8',function(err,data){
          if(err){
            res.redirect(404);
          }
          res.end(data);
      });
  }else{
    // 其他页面
      next();
  }
})


  关键字:nodejsexpress静态资源管理express.static


鼓掌

0

正能量

0

0

呵呵

0


评论区