详解如何使用node.js的开发框架express创建一个web应用


Posted in Javascript onDecember 20, 2018

搭建环境

1.安装Express

按键:Windows+R=>输入cmd,打开命令行,输入

npm install -g express@3

我们需要用全局模式安装Express,因为只有这样,我们才能在命令行中使用它

注意:这里我只选用Express 3.x版本,要是你对Express3x版本熟悉了的话,你只需看一下Migrating from 3.x to 4.x 的文档即可过渡到Express 4.x

2.新建一个工程

继续打开命令行,输入

express -e murenziwei

注意:Express 3.x中使用ejs时不再是-t ejs,而是-e,可以输入express -h查看

继续输入:(路径切换到文件夹murenziwei)

cd murenziwei

继续输入:(安装所需模块)

npm install

如图所示

详解如何使用node.js的开发框架express创建一个web应用

安装成功后输入:

node app

详解如何使用node.js的开发框架express创建一个web应用

在浏览器上访问ocalhost:3000,如图以下:

详解如何使用node.js的开发框架express创建一个web应用

3.项目结构

我们回头看看生成的项目目录里面都有什么,打开我们的murenziwei文件夹,如图

详解如何使用node.js的开发框架express创建一个web应用

  • node_modules:存放package.json中安装的模块,当你在package.json中添加依赖的模块并安装后,该模块会存放在这个文件夹
  • public:存放图片/样式/脚本等文件
  • routes:存放路由文件
  • views:存放视图文件,或者说是模板文件
  • app.js:启动文件,或者说入口文件
  • package.json:存储项目的信息及模块依赖,当在dependencies中添加依赖的模块时,运行npm install,npm会检查当前目录下的package.json,并自动安装所有指定的模块
  • package-lock.json:记录整个node_modules文件夹的树状结构,加快安装模块的速度

让我们来看一看,打开app.js,究竟是什么代码组成?

/*

 Module dependencies.

 */

var express = require('express');

var routes = require('./routes');

var user = require('./routes/user');

var http = require('http');

var path = require('path');

var app = express();


// all environments

app.set('port', process.env.PORT || 3000);

app.set('views', path.join(__dirname, 'views'));

app.set('view engine', 'ejs');

app.use(express.favicon());

app.use(express.logger('dev'));

app.use(express.json());

app.use(express.urlencoded());

app.use(express.methodOverride());

app.use(app.router);

app.use(express.static(path.join(__dirname, 'public')));
 

// development only

if ('development' == app.get('env')) {

 app.use(express.errorHandler());

}


app.get('/', routes.index);

app.get('/users', user.list);

 

http.createServer(app).listen(app.get('port'), function(){

 console.log('Express server listening on port ' + app.get('port'));

});

这里我们通过require()加载了express,http,path模块,还有routes文件夹下的index.js和user.js

1.app.set('port', process.env.PORT || 3000):设置端口为process.env.PORT或者3000;

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

3.app.set('view engine','ejs'):设置视图模块引擎为ejs

4.app.use(express.favicon()):connect内建的中间件,使用默认的favicon图标,如果想使用自己的图标,需改为app.use(express.favicon(__dirname+"/public/images/favicon.ico")),这里我们把自定义的favicon.icon放到/public/images文件夹下

5.app.use(express.logger('dev')):connect内建的中间件,在开发环境下使用,在终端显示简单的日志,例如在启动app.js后访问localhost:3000,终端会输出:

详解如何使用node.js的开发框架express创建一个web应用

如果没有这一行代码,不管你怎么刷新页面,终端都只有一行Express sever listening on port 3000

详解如何使用node.js的开发框架express创建一个web应用

6.app.use(express.json());

app.use(urlencoded());

用来解析请求体,支持application/json,application/x-www-form-urlencoded

7.app.use(express.methodOverride()):connect内建的中间件,可以协助处理POST请求,伪装成 PUT,DELETE和其它HTTP方法

8.app.use(app.router):调用路由解析的规则

9.app.use(express.static(path.join(__dirname, 'public'))):connect内创建的中间件,将根目录下的public文件夹设置为存放images,css,js等静态文件的目录

if ('development' == app.get('env')) {
 app.use(express.errorHandler());
}

此段代码可理解为:配置开发环境下的错误处理,输出错误信息

10.app.get('/', routes.index):路由控制器,如果用户访问/(主页),则由routes.index来处理,routes/index.js的内容如下:

exports.index = function(req, res){
 res.render('index', { title: 'Express' });
};

通过exports.index导出index函数接口,app.get('/',routes.index)相当于:

app.get("/",function(res,rep){

res.render("index",{title:"Express"});

})

解释一下上行的res.render("index",{title:"Express"}):使用ejs模板引擎解析views/index.ejs(因为我们之前通过app.set("views",__dirname+"/views")设置了模板文件默认存储在views文件夹下),并传入一个对象,这个对象只有一个title属新,它的值为字符串Express,即用字符串Express替换views/index.ejs中所有的title变量,这就是我们所说的渲染视图,或者说渲染模板。

11.

http.createServer(app).listen(app.get('port'), function(){
 console.log('Express server listening on port ' + app.get('port'));
});

这段代码可以这样理解:创建http服务器并监听3000端口,创建成功后,终端显示如下

详解如何使用node.js的开发框架express创建一个web应用

然后我们就可以在浏览器中访问localhost:3000了

最后总结一下我所讲的知识点:如何创建一个node项目并启动它,了解了项目的大体结构。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript 鼠标滚轮事件
Apr 09 Javascript
Javascript遍历table中的元素示例代码
Jul 08 Javascript
JS+CSS实现仿支付宝菜单选中效果代码
Sep 25 Javascript
jQuery购物车插件jsorder用法(支持后台处理程序直接转换成DataTable处理)
Jun 08 Javascript
基于vuejs实现一个todolist项目
Apr 11 Javascript
vue中用H5实现文件上传的方法实例代码
May 27 Javascript
浅谈在vue项目中如何定义全局变量和全局函数
Oct 24 Javascript
vue项目中mock.js的使用及基本用法
May 22 Javascript
js+HTML5 canvas 实现简单的加载条(进度条)功能示例
Jul 16 Javascript
微信小程序 wx:for遍历循环使用实例解析
Sep 09 Javascript
微信小程序音乐播放器开发
Nov 20 Javascript
js实现一款简单踩白块小游戏(曾经很火)
Dec 02 Javascript
js canvas实现橡皮擦效果
Dec 20 #Javascript
浅谈VueJS SSR 后端绘制内存泄漏的相关解决经验
Dec 20 #Javascript
Cocos2d实现刮刮卡效果
Dec 20 #Javascript
浅谈Fetch 数据交互方式
Dec 20 #Javascript
cocos2dx+lua实现橡皮擦功能
Dec 20 #Javascript
element-ui table span-method(行合并)的实现代码
Dec 20 #Javascript
fetch 如何实现请求数据
Dec 20 #Javascript
You might like
ThinkPHP3.1新特性之动态设置自动完成和自动验证示例
2014/06/19 PHP
PHP数组和explode函数示例总结
2015/05/08 PHP
php集成开发环境详解
2019/09/24 PHP
jQuery动态创建html元素的常用方法汇总
2014/09/05 Javascript
jQuery插件EnPlaceholder实现输入框提示文字
2015/06/05 Javascript
jsonp跨域请求数据实现手机号码查询实例分析
2015/12/12 Javascript
Angularjs中date过滤器失效的问题及解决方法
2018/07/06 Javascript
Vue全局分页组件的实现代码
2018/08/10 Javascript
Vue动态获取width的方法
2018/08/22 Javascript
在vue中使用SockJS实现webSocket通信的过程
2018/08/29 Javascript
vue-vuex中使用commit提交mutation来修改state的方法详解
2018/09/16 Javascript
使用jQuery如何写一个含验证码的登录界面
2019/05/13 jQuery
[04:28]2014DOTA2国际邀请赛 采访小兔子LGD挺进钥匙体育馆
2014/07/14 DOTA
[01:00:35]2018DOTA2亚洲邀请赛3月30日B组 EffcetVSMineski
2018/03/31 DOTA
[02:37]2018DOTA2亚洲邀请赛赛前采访 VP.no[o]ne心中最强SOLO是谁
2018/04/04 DOTA
python 多线程应用介绍
2012/12/19 Python
Python解释执行原理分析
2014/08/22 Python
Python中条件判断语句的简单使用方法
2015/08/21 Python
详解Python 序列化Serialize 和 反序列化Deserialize
2017/08/20 Python
Django打印出在数据库中执行的语句问题
2019/07/25 Python
利用Tensorflow构建和训练自己的CNN来做简单的验证码识别方式
2020/01/20 Python
python实现logistic分类算法代码
2020/02/28 Python
Python unittest单元测试框架及断言方法
2020/04/15 Python
CSS3地图动态实例代码(圆圈向外扩散)
2018/06/15 HTML / CSS
CSS3 文字动画效果
2020/11/12 HTML / CSS
英国现代绅士品牌:Hackett
2017/12/17 全球购物
将一个文本文件的内容按倒序打印出来
2015/01/05 面试题
abstract class和interface有什么区别
2013/08/04 面试题
物流管理专业大学生自荐信
2013/10/04 职场文书
生物制药自我鉴定
2014/01/25 职场文书
党建工作汇报材料
2014/12/24 职场文书
试用期解除劳动合同通知书
2015/04/16 职场文书
银行催款通知书
2015/04/17 职场文书
开工典礼致辞
2015/07/29 职场文书
nginx处理http请求实现过程解析
2021/03/31 Servers
如何获取numpy array前N个最大值
2021/05/14 Python