express框架解析——学习笔记

用express脚手架组件的程序目录结构如下图:

/app.js 主程序配置,启动文件。

/package.json:存储着工程的信息及模块依赖,当在 dependencies 中添加依赖的模块时,运行 npm install ,npm 会检查当前目录下的 package.json,并自动安装所有指定的模块。

/node_modules:存放 package.json 中安装的模块及node.js中的基础模块信息,当你在 package.json 添加依赖的模块并安装后,存放在这个文件夹下。

/bin/www 服务器配置。

/public 静态资源,存放 image、css、js 等文件,且已经分好目录。

/routes 路由配置,存放路由文件。

/views 模板视图,存放视图文件或者说模版文件。

下面我开始一个个学习:

先看app.js

这里通过require()加载了express、path 等模块,以及 routes 文件夹下的index. js和 users.js 路由文件。下面来学习下每行代码的含义。

(1) var app = express():生成一个express实例 app。

(2)app.set(‘views‘, path.join(__dirname, ‘views’)):设置 views 文件夹为存放视图文件的目录, 即存放模板文件的地方,__dirname 为全局变量,存储当前正在执行的脚本所在的目录。

(3)app.set(‘view engine‘, ‘ejs’):设置视图模板引擎为 ejs。

(4)app.use(favicon(__dirname + ‘/public/favicon.ico’)):设置/public/favicon.ico为favicon图标。

(5)app.use(logger(‘dev’)):加载日志中间件。

(6)app.use(bodyParser.json()):加载解析json的中间件。

(7)app.use(bodyParser.urlencoded({ extended: false })):加载解析urlencoded请求体的中间件。

(8)app.use(cookieParser()):加载解析cookie的中间件。

(9)app.use(express.static(path.join(__dirname, ‘public‘))):设置public文件夹为存放静态文件的目录。

(10)app.use(‘/‘, routes);和app.use(‘/users‘, users):路由控制器。

(11) app.use(function(req, res, next) {

    var err = new Error(‘Not Found‘);
    err.status = 404;
    next(err);
});

捕获404错误,并转发到错误处理器。

if (app.get(‘env‘) === ‘development‘) {
    app.use(function(err, req, res, next) {
        res.status(err.status || 500);
        res.render(‘error‘, {
            message: err.message,
            error: err
        });
    });
}

(13) 开发环境下的错误处理器,将错误信息渲染error模版并显示到浏览器中。

app.use(function(err, req, res, next) {
    res.status(err.status || 500);
    res.render(‘error‘, {
        message: err.message,
        error: {}
    });
});

生产环境下的错误处理器,将错误信息渲染error模版并显示到浏览器中。

(14)module.exports = app :导出app实例供其他模块调用。

---恢复内容结束---

用express脚手架组件的程序目录结构如下图:

/app.js 主程序配置,启动文件。

/package.json:存储着工程的信息及模块依赖,当在 dependencies 中添加依赖的模块时,运行 npm install ,npm 会检查当前目录下的 package.json,并自动安装所有指定的模块。

/node_modules:存放 package.json 中安装的模块及node.js中的基础模块信息,当你在 package.json 添加依赖的模块并安装后,存放在这个文件夹下。

/bin/www 服务器配置。

/public 静态资源,存放 image、css、js 等文件,且已经分好目录。

/routes 路由配置,存放路由文件。

/views 模板视图,存放视图文件或者说模版文件。

下面我开始一个个学习:

先看app.js

这里通过require()加载了express、path 等模块,以及 routes 文件夹下的index. js和 users.js 路由文件。下面来学习下每行代码的含义。

(1) var app = express():生成一个express实例 app。

(2)app.set(‘views‘, path.join(__dirname, ‘views’)):设置 views 文件夹为存放视图文件的目录, 即存放模板文件的地方,__dirname 为全局变量,存储当前正在执行的脚本所在的目录。

(3)app.set(‘view engine‘, ‘jade’):设置视图模板引擎为 jade。

(4)app.use(logger(‘dev’)):加载日志中间件。

(5)app.use(bodyParser.json()):加载解析json的中间件。

(6)app.use(bodyParser.urlencoded({ extended: false })):加载解析urlencoded请求体的中间件。

(7)app.use(cookieParser()):加载解析cookie的中间件。

(8)app.use(express.static(path.join(__dirname, ‘public‘))):设置public文件夹为存放静态文件的目录。

(9)app.use(‘/‘, index);和app.use(‘/users‘, users):路由控制器。

(10) app.use(function(req, res, next) {

    var err = new Error(‘Not Found‘);
    err.status = 404;
    next(err);
});

捕获404错误,并转发到错误处理器。

(11) app.use(function(err, req, res, next) {

  res.locals.message = err.message;

  res.locals.error = req.app.get(‘env‘) === ‘development‘ ? err : {};

  res.status(err.status || 500);

  res.render(‘error‘);

});

全环境下的错误处理器,将错误信息渲染error模版并显示到浏览器中。

(13)module.exports = app :导出app实例供其他模块调用。

我们再来看看bin/www 文件:

(1) var app = require(‘../app’):引入我们上面导出的app实例。

(2) var debug = require(‘debug‘)(‘blog’):引入debug模块,打印调试日志。

(3) var http = require(‘http‘):引入http模块。

(4)

var port = normalizePort(process.env.PORT || ‘3000‘);

app.set(‘port‘, port);

得到环境变量中设置的PORT或者手动设置PORT,然后赋予到app实例中。

(5)

var server = http.createServer(app);

server.listen(port);

server.on(‘error‘, onError);

server.on(‘listening‘, onListening);

创建http server实例,并监听端口,指定发生错误时的处理方法,指定监听成功时的回调方法。

(6) normalizePort函数,规范端口参数的格式

(7) onError函数,错误处理方法。

(8) onListening函数,监听成功的方法。

在看看routes/index.js 文件:

生成一个路由实例用来捕获访问主页的GET请求,导出这个路由并在app.js中通过app.use(‘/‘, routes); 加载。这样,当访问主页时,就会调用res.render(‘index‘, { title: ‘Express‘ });渲染views/index.ejs模版并显示到浏览器中。

再看看 views/index.ejs 文件:

在渲染模板时传入了一个变量 title 值为 express 字符串,模板引擎会将所有 <%= title %> 替换为 express ,然后将渲染后生成的html显示到浏览器中,如上图所示。

时间: 2024-10-12 22:47:02

express框架解析——学习笔记的相关文章

node.js框架StrongLoop学习笔记(一)

node.js框架StrongLoop学习笔记(一) 本人在用node.js做手机后台,查找框架发现StrongLoop挺适合,可是却发现没有中文教程,于是在自己学习时,做一下笔记,以方便其他像我一样的人参考(本人的英语水平非常差,只能一点点试着做,并记录下来,如果大家发现问题,请通知我好更正,谢谢了!).所有操作都是在CentOS7-x64,Node.js 0.12.2下完成的. nodejs框架StrongLoop学习笔记一 安装StrongLoop 创建项目 安装数据库驱动 配置数据库连接

Mina框架的学习笔记——Android客户端的实现

Apache MINA(Multipurpose Infrastructure for Network Applications) 是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架.当前发行的 MINA 版本支持基于 Java NIO 技术的 TCP/UDP 应用程序开发.串口通讯程序(只在最新的预览版中提供),MINA 所支持的功能也在进一步的扩展中.目前正在使用 MINA 的软件包括有:Apache Directory Project.Asyn

PHP-会员登录与注册例子解析-学习笔记

1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UML类图解析: 4.PHP代码: 我已经把有关这部分PHP代码,上传到git.oschina.net上,可以在 https://git.oschina.net/andywww/myTest 的文件夹 login1下看到相关的完整代码. (完.)

分页框架pager-taglib学习笔记

下面的笔记来自于孔浩老师的视频教程和我自己的开发实践. 使用Pager-taglib可以帮助我们快速开发分页处理. pager-taglib-2.0.war这是我们第1次直观地认识jar包.直接放到tomcat的webapp目录下面,就可以启动项目,查看帮助文档.说明:拷贝完之后,可以改一个名字,方便我们写访问的路径.使用的步骤:(1)将相应包拷贝到lib目录(pager-taglib.jar),另外一个是源码包,貌似可以不拷贝,我还没试过.(2)在jsp页面引入相应的分页标签库.引入标签 pr

《Pro Express.js》学习笔记——概述

要学Node.js,先学Express.js. Express.js是Node.js官方推荐的基础框架. Express.js框架经过一系列的发展,已经到了4.x版本.新的版本解决了3.x之前版本的依赖过重问题,只保留了一个static模块. 掌握Express.js框架之后,再去学习Node.js框架,会轻松许多,许多难题都迎刃而解.这就是循序渐进的力量.

【MUI框架】学习笔记整理 Day 1

MUI 框架之 [原生UI] (1)accordion(折叠面板) 由二级列表演化而来 1 <ul class="mui-table-view"> 2 <li class="mui-table-view-cell mui-collapse"> 3 <a class="mui-navigate-right" href="#"></a> 4 <div class="m

Android Mina框架的学习笔记

Apache MINA(Multipurpose Infrastructure for Network Applications) 是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架.当前发行的 MINA 版本支持基于 Java NIO 技术的 TCP/UDP 应用程序开发.串口通讯程序(只在最新的预览版中提供),MINA 所支持的功能也在进一步的扩展中.目前正在使用 MINA 的软件包括有:Apache Directory Project.Asyn

《Pro Express.js》学习笔记——Express服务启动常规七步

Express服务启动常规七步 1.       引用模块 var express=require('express'), compression=require('compression'), bodyParser=require('body-parser'), mongo=require('mongoskin'); 2.       实例化express.js对象和其它对象 var app=express(); var db=mongo.db('mongodb://localhost:270

jfinal框架教程-学习笔记

JFinal  是基于 Java  语言的极速  WEB  + ORM  开发框架,其核心设计目标是开发迅速.代码量少.学习简单.功能强大.轻量级.易扩展.Restful.在拥有Java 语言所有优势的同时再拥有 ruby.python.php 等动态语言的开发效率!为您节约更多时间,去陪恋人.家人和朋友!(鼓掌!~~) JFinal 有如下主要特点: ?  MVC 架构,设计精巧,使用简单 ?  遵循 COC 原则,零配置,无 xml ?  独创 Db + Record 模式,灵活便利 ?