// 使用各种模块包
// http-errors模块包主要功能监视http请求过程的错误。中间件middleware,中间件本质上就是一个模块包。监听错误的中间件。
var createError = require('http-errors');
// express模块包,框架
// 语句=》函数=》脚本库=》模块包=》框架=》平台
var express = require('express');
// path模块是node自带的模块。path模块主要功能负责获取路径信息
var path = require('path');
// cookie-parser模块主要负责解析cookie,cookie解析中间件
var cookieParser = require('cookie-parser');
// morgan模块主要负责记录请求日志。日志中间件
var logger = require('morgan');
var indexRouter = require('./routes/index.js');
var usersRouter = require('./routes/users');
var productsRouter = require('./routes/products.js');
// 调用express构造函数,创建一个应用程序实例。
var app = express();
// __dirname项目的根目录C:\Users\Steven Tung\Desktop\63\47\myapp
// console.log(__dirname);
// path.join()把多个路径合并成一个新路径C:\Users\Steven Tung\Desktop\63\47\myapp\views
// console.log(path.join(__dirname, 'views'));
// view engine setup
// 设置视图引擎
// 设置视图所在的文件夹。
app.set('views', path.join(__dirname, 'views'));
// 设置解析视图所使用的模块引擎。
app.set('view engine', 'ejs');
// app.use() 使用, 应用程序使用中间件。
app.use(logger('dev'));
// express.json()也是一个中间件,解析请求传递过来的数据,解析成json格式。
app.use(express.json());
// express.urlencoded()也是一个中间件,进行url编码, extended:true编码/解码的字符多,false相对较少。
app.use(express.urlencoded({ extended: false }));
// 使用cookie中间件解析cookie
app.use(cookieParser());
// express.static()设置静态资源目录,应用程序运行过程找静态资源(图片,脚本,样式,静态文档)时,去public文件中查找
// 默认主页的命名index.html, public可以修改,但一般不建议改。
app.use(express.static(path.join(__dirname, 'public')));
// 使用路由中间件。 第一个参数起一个别名(路径的前缀),别名再和路由中路径进行拼接,形成一个完整的url路径
app.use('/', indexRouter);
app.use('/users', usersRouter);
app.use('/products', productsRouter);
// catch 404 and forward to error handler
// 错误处理中间件, 开发者自行处理的错误逻辑
// next()是一个函数,传递给下一个中间件
app.use(function(req, res, next) {
console.log('error');
// return;
next();
}, function(req, res, next){
console.log("添加多个中间件");
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.ejs');
});
module.exports = app;