初窥nodejs(四) ——express框架

来源:互联网 发布:淘宝皇冠店铺100强 编辑:程序博客网 时间:2024/05/21 11:10

写在前面

在这篇博客中,我为介绍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});
原创粉丝点击