Node.js学习(五)express框架

学习视频
Node.js学习(一)介绍
Node.js学习(二)异步、缓存区、文件系统
Node.js学习(三)常用模块与网络爬虫
Node.js学习(四)网络服务器

介绍

中文官网

  1. 什么是Express
    Express是一个基于node.js的极简、灵活的web开发框架。可以实现非常强大的web服务器功能。
  2. express的特点
    可以设置中间件响应或过滤http请求
    可以使用路由实现动态网页,响应不用的http请求
    内置支持ejs模板(默认地jade模板)实现模板渲染生成html
  3. express-generator生成器
    express-generator是express官方团队为开发者准备的一个快速生成工具,可以非常快速的生成一个基本的express开发框架。
  4. express安装与使用
  • 安装express-generator生成器
    cnpm i -g express-generator 安装完成后使用express命令
  • 创建项目
    express -e 项目名称 自动创建项目目录
    express -e 需要手动创建项目目录
  • 安装依赖
    cnpm i
  • 开启项目
    node app 需要手动添加监听端口的代码
    npm start 自动查找当前目录下的package.json文件,找到start对应的命令进行执行
    node ./bin/www
  • 测试项目
    打开浏览器,输入项目地址

目录说明

Node.js学习(五)express框架_第1张图片

  1. 目录
  • bin:可执行文件木
  • node_modules:依赖包的目录
  • public:静态文件根目录。所有静态文件都应当放在这个目录下(静态html、css、js、图片、字体、视频等资源)
  • routes:路由模块目录,动态文件的目录。请求发生时,优先照静态文件,如果没有静态存在则照动态路由,如果动态路由也没有,就404
  • views:项目目录,用于存储所有的ejs模板
  1. 文件
  • app.js:项目的主文件,对整个项目的所有资源进行统筹的安排
  • package.json:项目描述文件,声明项目的名称、版本、依赖等信息

路由

  1. 什么是路由?
    路由是指接收用户请求,处理用户数据,返回结果给用户的一套程序。可以理解为:动态网页的程序。
    后端路由的核心:URL
  2. express路由
    express对象自带有一个Router类,可以实例化出路由对象,可以在改对象上挂载非常多的路由节点。
  3. 路由的写法
//挂载路由线路的写法
router.请求方式('请求地址',function(req,res){
	res.send('数据')
})
  1. 创建一个独立的路由模块
    //需求:创建一个vip路由模块,接收vip目录下的所有请求,响应数据
    1)创建一个vip路由模块
    2)编写路由模块的代码
    a. 引入express模块
    b. 实例化路由对象
    c. 编写路由线路挂载到路由对象上
    d.暴露路由对象
    3)将编写好的路由模块引入到主模块,由主模块分配对应的请求到改模块去处理
    var vip=require(’./routes/vip.js’);//引入vip路由模块
    app.use(’/vip’,vip);//分配vip目录下的请求给vip路由模块去处理
  2. 路由的区分
    大路由(主路由):app.js 负责接收所有请求,对请求进行分配
    小路由(分路由):/routes下面的所有路由模块,只负责处理自己能管理的目录下的所有请求

响应对象res

  1. 响应对象是什么
    响应对象是在服务器向客户端响应数据的对象,包含了所有要响应的内容
  2. 响应对象的方法
  • res.send();//返回任意类型的数据费客户端
    注意:
    a. 如果返回一个数字,会当成是状态码,会报错
    b. send方法只能出现一次,重复无效还要报错
  • res.json();//返回JSON数据,自动设置响应头
  • res.render(‘模板名称’,{数据});读取模板文件,拼接数据,自动将结果发送给浏览器
  • res.donwload(‘文件地址’);下载当前目录下面的文件
  • res.redirect(‘目标’);服务器跳转
  • res.set(‘响应头对象’)//设置响应头
  • res.status();//设置状态码
var express = require('express');
var router = express.Router();

router.get('/response.html', function(req, res, next) {
  // res.send('hello world');//可以返回字符串
  // var data=[{id:"1",name:"lili"}];
  // res.send(data);

  // res.send('1');//如果一定要返回数字,必须加引号变成字符串

  //返回状态码+数据 链式调用
  // res.status(200).send('啦啦啦啦');

  //返回json,自动设置响应头
  //res.json(data);

  //模板渲染
  // res.render('index.ejs',{title:'张三'});
  

});

module.exports = router;

请求对象req

  1. 什么是请求对象?
    客户端想服务器发送的对象,包含请求头和请求主体
  2. 接收GET方式传的值
    语法:req.query.参数名
    示例:req.query.id
  3. 接收POST方式传的值
    语法:req.body.参数名
  4. 匹配URL网址上的数据(匹配模式)
    在接请求地方去匹配,再通过语法进行接收。
    语法:req.params.参数名
var express = require('express');
var router = express.Router();
//编写login.html路由,接收POST传的值,处理数据
router.get('/login.html', function(req, res, next) {
  var username=req.body.username;
  res.send('用户名:'+username)
});

//编写news路由,接收新闻请求
router.get('/news/:id',function(req,res){
  var id=req.params.id;
  res.send('获取的id为:'+id)
})

module.exports = router;

中间件

  1. 什么是中间件?
    中间件就是一个函数,位于客户端与路由之间,可以访问请求对象和响应对象,也可以调起下一个中间件。
    express框架就是一个由中间件构架起来的框架,整个矿建全是中间件。
  2. 自定义中间件
    app.use(function(req,res,next){console.log(‘我是中间件’)});
  3. 尾函数next
    如果在中间件不调用next函数,整个请求响应过程就终止,不糊再往后执行。
    调用尾函数相当于调用下一个中间件,执行完以后自己的函数继续执行。
app.use(function(req,res,next){
  console.log('111');
  next();
  console.log('222');
})
app.use(function(req,res,next){
  console.log('333');
  next();
  console.log('444');
})
app.use(function(req,res,next){
  console.log('555');
})

//结果是111 333 555 444 222

静态文件托管

为了提供诸如图像、CSS 文件和 JavaScript 文件之类的静态文件,请使用 Express 中的 express.static内置中间件函数。
此函数特征如下:

express.static(root, [options])

例如,通过如下代码就可以将 public 目录下的图片、CSS 文件、JavaScript 文件对外开放访问了:

app.use(express.static('public'))

现在,你就可以访问 public 目录中的所有文件了:

http://localhost:3000/images/kitten.jpg
http://localhost:3000/css/style.css

如果要使用多个静态资源目录,请多次调用 express.static 中间件函数:

app.use(express.static('public'))
app.use(express.static('files'))

访问静态资源文件时,express.static 中间件函数会根据目录的添加顺序查找所需的文件。

app.use('/static', express.static('public'))

现在,你就可以通过带有 /static 前缀地址来访问 public 目录中的文件了。

http://localhost:3000/static/images/kitten.jpg
http://localhost:3000/static/css/style.css

解决跨域

安装cors

cnpm i cors

node中使用

app.use(require('cors')());

你可能感兴趣的:(nodejs)