全局安装 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;