Node.js express

express

express是一个基于node.js的极简、灵活的web开发框架。可以实现非常强大的web服务器功能。

express的特点
	可以设置中间件响应或过滤http请求。
	可以使用路由实现动态网页,响应不同的http请求。
	内置支持ejs模板(默认是jade模板)实现模板渲染生成html。

使用express框架

初始化项目

npm init

安装

npm install express -save  

引入

const express = require ("express"); 

创建服务

const app = express()

监听端口

app.listen(3000,()=>{console.log("服务器已运行")})
//引入express包
const express = require('express')

const bodyParser = require('body-parser')

const app = express()

//使用bodyParser
app.use(bodyParser.urlencoded({ extended: false }))

//设置模板引擎是ejs模板
app.set('view engine', 'ejs'); 


//接受post方式发送的数据
app.post('/heaven',function(req,res){
    console.log('post请求过来了');
    console.log(req.body)
    // res.end({name:'heaven'})

    //send函数是express新增的 这个方法可以发送数组和对象给前台
    res.send([1,2,3])
})




//自动为public目录中的文件设置路由
app.use(express.static('public'))
app.listen(3001,()=>{
    console.log('3001端口成功运行');
})

路由

1. 什么是路由?
路由是指接收用户请求,处理用户数据,返回结果给用户的一套程序。 可以理解为:动态网页的程序。
后端路由的核心: URL

2. express的路由
express对象自带有一个Router类, 可以实例化出路由对象,可以在该对象上挂载非常多的路由节点。

3. 路由的写法
//挂载路由线路的写法
router.请求方式('请求地址',function(req,res){
	res.send('数据');
});
	
4. 路由的区分
	大路由(总路由): app.js  负责接收所有请求,对请求进行分配
	小路由(分路由): /routes下面的所有路由模块, 只负责处理自己能管理的目录下的所有请求

挂载路由:get方式

app.get(路由,(req,res,next)=>{
		//get请求数据存放在req.query上
		//对应的逻辑
})

挂载路由:post方式

app.post(路由,(req,res,next)=>{
		//post请求数据可以通过安装中间件body-parser来获取,安装后数据存放在req.body上
		//对应的逻辑
})

挂载路由:静态资源

//public目录下的文件  use方法get请求和post请求都会触发
app.use(express.static("public"))

创建独立的路由

 创建一个独立的路由模块
	//需求:创建一个vip路由模块,接收vip目录下的所有请求,响应数据。
	
	1) 创建一个vip路由模块
		在routes路由目录下创建vip.js
	
	2) 编写路由模块的代码
		a. 引入express模块
		b. 实例化路由对象
		c. 编写路由线路挂载到路由对象上
		d. 暴露路由对象
		
	3) 将编写好的路由模块引入到主模块,由主模块分配对应的请求到该模块去处理
		var vip=require('./routes/vip.js'); //引入vip路由模块
		app.use('/vip',vip); //分配 vip目录下的请求给vip路由模块去处理

vip.js

//这是vip.js

var express=require('express'); //引入express模块
var router=express.Router(); //利用Router类创建一个路由实例

//编写list.html用于展示所有的vip用户
router.get('/list.html',function(req,res){
	res.send('<h1>张三、李四、王小五</h1>');
});

//注意:写请求路径时不需要加父目录名, 不要加 /vip,不需要写 路径中 vip后面的一截。
router.get('/info.html',function(req,res){
	res.send('<h1>会员名:张三<br/>年龄:18<br/>特征:经常失踪</h1>');
});

module.exports=router;

主模块(app.js)

//这是主模块

var vip=require('./routes/vip.js'); //引入vip路由模块
app.use('/vip',vip); //分配 vip目录下的请求给vip路由模块去处理

使用express-generator快速搭建express框架

	express-generator是 express官方团队为开发者准备的一个快速生成工具,可以非常快速的生成一个
基本的express开发框架。

安装express-generator生成器

cnpm i -g express-generator   //安装完成后可以使用express命令

创建项目

express -e 项目名称 //自动创建项目目录
express -e	//不会创建项目目录

安装依赖

cnpm i

开启项目

node app	//【推荐】需要手动添加监听端口的代码
app.listen(80,function(){
	console.log('服务器已运行...');
});
		
npm start	//自动查找当前目录下的 package.json文件,找到 start对应的命令进行执行
node ./bin/www

测试项目

打浏览器,输入 localhost

目录说明

目录

bin		可执行文件目录

node_modules	依赖包的目录

public	静态文件根目录
	所有的静态文件都应当放在这个目录下(静态html、css、js、图片、字体、视频等资源)
	
routes	路由模块目录,动态文件的目录
	请求发生时,优先找静态文件,如果没有静态存在则找动态路由,如果动态路由也没有,就404
	
views	视图目录,用于存储所有的ejs模板

文件

app.js	项目的主文件,对整个项目的所有资源进行统筹的安排。

package.json	项目描述文件,声明项目的名称、版本、依赖等信息。

请求对象

请求对象 req:
	1) 什么是请求对象?
		客户端向服务器发送数据的对象,包含请求头和请求主体

	2) 接收GET方式传的值【重点】
		语法: req.query.参数名
		示例: req.query.id

	3) 接收POST方式传的值【重点】
		语法: req.body.参数名
		示例: req.body.username
		(解析body不是nodejs默认提供的,需要载入body-parser中间件才可以使用req.body;
		  此方法通常用来解析POST请求中的数据)

	4) 匹配URL网址上的数据(匹配模式)
		在接请求地方去匹配,再通过语法进行接收。
		语法:  req.params.参数名

响应对象

响应对象 res:
	1) 响应对象是什么
		响应对象是指服务器向客户端响应数据的对象,包含了所有要响应的内容

	2) 响应对象的方法
			res.send(); //【重点】返回任意类型的数据给客户端
				注意:
					a. 如果返回一个数字,会当成是状态码,会报错。
					b. send方法只能出现一次,重复无效还要报错。

			res.json();	//返回JSON数据,自动设置响应头
			res.render('模板名称',{数据}); //【重点】读取模板文件,拼接数据,自动将结果发送给浏览器
			res.redirect('目标'); //服务器端跳转
			res.set({"Content-Type":"text/html; charset=utf-8"}); //【重点】设置响应头
			res.status(); //【重点】设置状态码

中间件

中间件:
	1) 什么是中间件?
		中间件就是一个函数, 位于客户端与路由之间,可以访问请求对象和响应对象,也可以调起下一个中间件。
		express框架就是一个由中间件构架起来的框架,整个框架全是中间件。

	2) 自定义中间件
		app.use(function(req,res,next){
				res.send('我是中间件');
			});

	3) 尾函数 next
		如果在中间件不调用next函数, 整个请求响应流程就中止不会再往后面执行
		调用尾函数相当于调用下一个中间件,执行完以后自己的函数继续执行
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值