无标题文章


### 一.Node.js Express 框架

#### 1.Express 简介

Express 是一个简洁而灵活的 node.js Web应用框架, 提供了一系列强大特性帮助你创建各种 Web 应用,和丰富的 HTTP 工具。

使用 Express 可以快速地搭建一个完整功能的网站。

Express 框架核心特性:

1.可以设置中间件来响应 HTTP 请求。

2.定义了路由表用于执行不同的 HTTP 请求动作。

3.可以通过向模板传递参数来动态渲染 HTML 页面

#### 2.安装 Express

代码如下:

```

npm install express --save

```

1.在使用express的时候需要配合以下模块一起安装

body-parser - node.js 中间件,用于处理 JSON, Raw, Text 和 URL 编码的数据。

cookie-parser - 这就是一个解析Cookie的工具。通过req.cookies可以取到传过来的cookie,并把它们转成对象。

multer - node.js 中间件,用于处理 enctype="multipart/form-data"(设置表单的MIME编码)的表单数据。

代码如下:

```

npm install body-parser --save

npm install cookie-parser --save

npm install multer --save

```

2.第一个express框架案例,还是hello  world

server.listen([port[, host[, backlog]]][, callback])可以有四个参数,后面三个为可选

代码如下:

```

//引入express模块

var express = require('express')

//等同于启动服务器

var app = express()

//等同于前面路由访问

app.get('/',(req,res)=>{


    //返回数据,等同于前面的res.write和res.end

    res.send('hello world')

})

//端口输出

var server  = app.listen(8889,()=>{

    //获取server的地址

    var address = server.address()

    console.log(address)

})

console.log("Server running at http://127.0.0.1:8889/")

```

执行node express.js运行结果得到下面结果

![在这里插入图片描述](https://img-blog.csdnimg.cn/20190807173314571.jpg)

3.Express 应用程序生成器

http://www.expressjs.com.cn/starter/generator.html类似webpack生成框架可以参考

4.利用express来写路由

```

//引入express模块

var express = require('express')

//等同于启动服务器

var app = express()

//等同于前面路由访问

app.get('/',(req,res)=>{


    //返回数据,等同于前面的res.write和res.end

    res.send('hello world')

})

app.get('/a',(req,res)=>{


    //返回数据,等同于前面的res.write和res.end

    res.send('a')

})

app.get('/b',(req,res)=>{


    //返回数据,等同于前面的res.write和res.end

    res.send('b')

})

app.get('/c',(req,res)=>{


    //返回数据,等同于前面的res.write和res.end

    res.send('c')

})

app.listen(8889)

console.log("Server running at http://127.0.0.1:8889/")

```

5.获取静态文件

Express 提供了内置的中间件 express.static 来设置静态文件如:图片, CSS, JavaScript 等。你可以使用 express.static 中间件来设置静态文件路径

```

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

```

首先启动服务器获取公共资源,代码如下

```

var express = require('express');

var app = express();

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

app.get('/', function (req, res) {

  res.send('Hello World');

}).listen(8889)

```

可以通过访问公共资源路径访问对应资源如下图

![在这里插入图片描述](https://img-blog.csdnimg.cn/20190807183930484.jpg)

6.获取post和get请求参数

```

const express = require('express');

const app = express();

const bodyParser = require('body-parser');

// 创建 application/x-www-form-urlencoded 编码解析

const urlencodedParser = bodyParser.urlencoded({ extended: false })

//跳转路由到a/html

app.get('/a.html', function (req, res) {

    //返回a的页面

  res.sendFile( __dirname + "/" + "a.html" );

})

//通过post提交到/process_post

app.post('/process_post', urlencodedParser, function (req, res) {

  // 输出 JSON 格式

  const response = {

      "first_name":req.body.first_name,

      "last_name":req.body.last_name

  };

  console.log(response);

  res.end(JSON.stringify(response));

})

app.listen(8081)

```

注意a.html代码

```

<html>

<body>

<form action="http://127.0.0.1:8081/process_post" method="POST">

First Name: <input type="text" name="first_name">  <br>

Last Name: <input type="text" name="last_name">

<input type="submit" value="Submit">

</form>

</body>

</html>

```

7.文件上传

注意multer  中间件的使用,参数为固定形式

```

//dest or storage: 上传的文件所存放的位置 ,array允许上传文件格式和几个

app.use(multer({ dest: '/tmp/'}).array('image',2));

```

具体文件上传的代码为下

```

var express = require('express');

var app = express();

var fs = require("fs");

var bodyParser = require('body-parser');

//上传文件的中间件,上传文件借助的工具

var multer  = require('multer');

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

app.use(bodyParser.urlencoded({ extended: false }));

//dest or storage: 上传的文件所存放的位置 ,array允许上传文件格式和几个

app.use(multer({ dest: '/tmp/'}).array('image',2));

app.get('/index.html', function (req, res) {

  res.sendFile( __dirname + "/" + "index.html" );

})

app.post('/file_upload', function (req, res) {

  console.log(req.files[0]);  // 上传的文件信息

  var des_file = __dirname + "/" + req.files[0].originalname;

  fs.readFile( req.files[0].path, function (err, data) {

        //文件写入的地方

        fs.writeFile(des_file, data, function (err) {

        if( err ){

              console.log( err );

        }else{

              response = {

                  message:'File uploaded successfully',

                  filename:req.files[0].originalname

              };

          }

          console.log( response );

          res.end( JSON.stringify( response ) );

      });

  });

})

app.listen(8888)

```

上传文件信息 为下面代码,从而展现

```

{ fieldname: 'image',

  originalname: 'logo.png',

  encoding: '7bit',

  mimetype: 'image/png',

  destination: '/tmp/',

  filename: '2db85c05f731fa2da349aa73d35940c6',

  path: '\\tmp\\2db85c05f731fa2da349aa73d35940c6',

  size: 6849 }

{ message: 'File uploaded successfully', filename: 'logo.png' }

```

8.Cookie 管理

util中间件的使用,通过中间件请求的cookie

```

// express_cookie.js 文件

var express      = require('express')

var cookieParser = require('cookie-parser')

var util = require('util');

var app = express()

app.use(cookieParser())

app.get('/', function(req, res) {

    console.log("Cookies: " + util.inspect(req.cookies));

})

app.listen(8081)

```

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容