Express 自定义中间件 实现中间件访问静态文件,实现日志的实时保存

全局安装 Express

npm install express -g

全局安装 Express 生成器 express-generator

npm install express-generator -g

使用 express-generator 生成项目

express middleware
cd middleware
npm install

项目需求

        1、开发一个应用级中间件,以检查诶个请求中是否含有 token ,如果含有,就继续执行

        2、开发一个应用级中间件,以记录网站访问日志,将访问当前后台的IP写入日志文件中,用于记录或查看那些计算机访问过系统

        3、使用 express.static 内置中间件访问静态文件

项目操作

1、在目录根目录下创建 web.log 文件,用于保存日志。

app.js --- 项目入口文件

var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');

var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');

var app = express();

//实验问题3代码开始
var options = {
  dotfiles: 'ignore',            //是否对外输出以 '.' 开头的文件名
  etag: false,                   //启动或禁用etag生成
  extensions: ['htm', 'html'],   //用于设置后备文件扩展名(遇到这些扩展名是,可以省略)
  index: false,                  //发送目录索引文件,当参数为false时,表示禁用建立目录索引
  maxAge: '1d',                  //设置 Canche-Control 头的 max-age 属性 (以毫秒为单位)
  redirect: false,               //当路径名是目录时重定向到结尾的'/'
  /* 设置请求头 */
  setHeaders: (res, path, stat) => {
    res.set('x-timestamp', Date.now());
  }
}
app.use(express.static('public', options));
//实验问题3代码结束
//实验问题1代码开始
app.use((req, res, next) => {
  //自定义一个token
  let token = 'sdfafadf9687';
  var assessToken = req.query.token;
  //检查请求中是否含有 "认证牌" ,如果含有,就继续执行
  if (assessToken == token) {
    next();
  } else {
    res.send({
      code: 1,
      message: '请求必须含有token'
    })
  }
})
//实验问题1代码开结束
//实验问题2代码开开始
/* 需求: 记录网站访问日志中间件 */
app.use((req, res, next) => {
  let fs = require('fs');
  let ip = req.ip;
  let time = new Date().toLocaleString();
  let data = fs.readFileSync('./web.log');
  data += '访问时间:' + time + 'ip:' + ip + "\n";
  // console.log(111);
  fs.writeFileSync('./web.log', data);
  next();
})
//实验问题2代码开结束
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', indexRouter);
app.use('/users', usersRouter);

// catch 404 and forward to error handler
app.use(function (req, res, next) {
  next(createError(404));
});

// error handler
app.use(function (err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});

module.exports = app;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值