初窥nodejs(四) ——express框架

写在前面

在这篇博客中,我为介绍express框架及其中间件的使用

何为express

express和原生nodejs的关系就类似于jquery和原生js的关系。
express基于nodejs,并对nodejs进行封装,更方便我们使用

使用express

第一步:引入express模块

const express=require('express');

第二步:开启服务

var server=express();

第三步:监听端口

server.listen(8080);

get&post&use

express对nodejs的http.createServer(function(req,res){})进行了封装。封装了三个函数:
server.get(function(req,res){})//接收get请求
server.post(function(req,res){})//接收post请求
server.use(function(req,res){})//接收所有请求

req&res

express是基于nodejs并高于nodejs的
基于nodejs:express的req和res保留了原有的属性和方法。
高于nodejs:express的req和res扩展了一些属性和方法。

举个例子
res.write(data)方法是先前台传送数据data,但是这个data不能是json。
express保留了res.write()方法,同时开发了res.send()方法。
res.send(data)方法是先前台传送数据data,这个data可以是任意数据。
这样的例子还有很多......

中间件

    我们知道jquery是轻量级的框架,但是它却能做几乎所有的事情,原因是因为jquery支持插件,这使得有很多基于jquery的插件。
    输入框插件,进度条插件等等......
    类似jquery的express,类似jquery,它也支持中间件。这里我们介绍一个中间件:
body-parser
const bodyParser=require('body-parser');
server.use(bodyParser.urlencoded({
  extended: false,                 //扩展模式
  limit:    2*1024*1024           //限制-2M
}));
server.use('/', function (req, res){
  console.log(req.body); //POST
});
它的简单作用是将post请求的数据存入req.body中

自定义中间件

    类似于自定义模块,我简单写一个自定义的body-parser,实现将post请求的数据存入req.body的功能。
const querystring=require('querystring');

module.exports={
  urlencoded: function (){
    return function (req, res, next){
      var str='';
      req.on('data', function (data){
        str+=data;
      });
      req.on('end', function (){
        req.body=querystring.parse(str);
        next();
      });
    };
  }
}
    这同样也能实现同样的功能,也许有人会奇怪我写的函数里next();是什么意思,这就是express的链式操作了

链式操作

什么是链式操作?链式操作类似于生活中的流水线。张三做了机顶盒,李四再来上漆,王五最后包装。next()的作用就是传给下一个人。

以post请求为例

server.use(function (req, res, next){
  var str='';
  req.on('data', function (data){
    str+=data;
  });
  req.on('end', function (){
    req.body=querystring.parse(str);
    next();//李四:req.body已经准备好
  });
});

server.use('/', function (req, res){
  console.log(req.body); //王五:打印李四准备好的req.body
});

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值