一、框架目录结构
├── 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框架文件解析
前行的路,不怕万人阻挡,只怕自己投降;人生的帆,不怕狂风巨浪,只怕自己没胆量!有路,就大胆去走;有梦,就大胆飞翔。
网友评论