express 服务框架(二)框架结构及配置文件解析


一、框架目录结构
├── bin ------------------------------------- 存放可执行文件
│   ├── www ------------------------------ 应用的主入口
├── public ------------------------------------- 静态文件目录
├── views ------------------------------------- 视图文件目录
├── routes ------------------------------------- 路由文件目录
│   ├── index.js ------------------------------ 路由入口文件
├── node_modules ---------------------------- 存放依赖的目录
├── app.js ---------------------------- 启动文件即入口文件
├── package.json ---------------------------- node配置文件,存储着工程的信息及模块依赖

其中 /bin/www 是应用的主入口。应用的真正入口是app.js文件,所以www文件先把app.js文件引进来,其余的内容主要就是创建了一个node HTTP server。

二、app.js 文件
//引入第三方库
const createError = require('http-errors');
const express = require('express');
const path = require('path');
const cookieParser = require('cookie-parser');
const  logger = require('morgan');

//引入路由文件
const indexRouter = require('./routes/index');
const  usersRouter = require('./routes/users');

//创建express框架
const app = express();

//设置模板
// views 设置了模板的位置
app.set('views', path.join(__dirname, 'views'));
//设置了要使用的模板引擎
app.set('view engine', 'ejs');

//使用上面引入的第三方库
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
//设置图片、js、css等静态资源目录
app.use(express.static(path.join(__dirname, 'public')));
//设置浏览器标签上的logo图标,可以不做
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));

//设置路由路径与引入的文件关联
app.use('/', indexRouter);
app.use('/users', usersRouter);

//处理错误的http请求
//捕获404错误,并转发到错误处理器
app.use(function(req, res, next) {
  next(createError(404));
});
//错误处理器
app.use(function(err, req, res, next) {
  //生产环境下的错误处理器,不会将错误信息泄露给用户
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};
  //开发环境下的错误处理器,将错误信息渲染error模版并显示到浏览器中
  res.status(err.status || 500);
  res.render('error');
});

//导出app实例供其他模块调用
module.exports = app;
三、bin/www 文件

/bin目录下的www 是应用的主入口,这里主要介绍上半部分。

/**
 * node 可执行文件
 */
#!/usr/bin/env node 

/**
 * 引入app.js中导出的app实例
 */
var app = require('../app');
/**
 * 引入debug模块,打印调试日志
 */
var debug = require('debug')('demo:server');
/**
 * 引入http模块
 */
var http = require('http');

/**
 * 设置端口号并启动工程并监听3000端口
 */
var port = normalizePort(process.env.PORT || '3000');
app.set('port', port);
四、routes文件夹

在之前的app.js中,我们曾引入过一些路由文件。这里我们以其中的index.js文件为例。

//引入express框架
var express = require('express');
//生成路由实例
var router = express.Router();

//捕获访问`/`根目录的的GET请求
router.get('/', function(req, res, next) {
  //调用res.render渲染views/index.ejs模版并显示到浏览器
  res.render('index', { title: 'Express' });
});

//导出路由
module.exports = router;
五、views文件夹

视图文件夹,放置视图文件。

参考文献:
Express Generator 生成 Express应用的目录结构express框架文件解析
前行的路,不怕万人阻挡,只怕自己投降;人生的帆,不怕狂风巨浪,只怕自己没胆量!有路,就大胆去走;有梦,就大胆飞翔。

你可能感兴趣的:(express 服务框架(二)框架结构及配置文件解析)