long-mao-bu-re

在node中使用express框架

Express


  • 原生的 http 在某些方面表现不足以应对我们的开发需求, 所以就需要使用框架来加快开发效率
  • 官网: https://www.expressjs.com.cn/

安装:

> npm install express --save
// 0. 安装
// 1. 引包
const express = require(\'express\');

// 2. 创建服务器应用程序
// 也就是原来的 http.createServer()
const app = express();

// 公开指定目录
// 只要这样做了,就可以直接通过 /public/xx 的方式访问 public目录中的所有资源了
app.use(\'/public/\', express.static(\'./public/\'));

// 当服务器收到 get 请求 / 的时候, 执行回调函数
app.get(\'/\', (req, res) => {
    // 在 Express 中可以直接使用 req.query 来获取url传递的参数
    console.log(req.query);
    // 在 express 中 write 和 end 方法依然可以用
    // res.write(\'hello \');
    // res.end(\'express !\')
    res.send(\'hello express!\');
});


// 相当于 server.listen
app.listen(3000, () => {
    console.log(\'port 3000, Server is Running...\');
});

1 基本路由

组成:

  • 请求方法
  • 请求路径
  • 请求处理函数

get:

// 当你以 GET 方法请求 / 的时候, 执行对应的处理函数
app.get(\'/\',(req,res)=>{
    res.send(\'Hello World\');
});

post:

// 当你以 POST 方法请求 / 的时候, 执行对应的处理函数
app.post(\'/\',(req,res)=>{
    res.send(\'Got a POST request\');
})

2 静态服务

// 引入
const express = require(\'express\');
// 创建 app
const app = express();

// 当以 /public/开头的时候, 去 ./public/ 目录中查找对应的资源
app.use(\'/public/\', express.static(\'./public\'));

app.get(\'/\', (req, res) => {
    res.send(\'hello world\');
});

app.listen(3000, () => {
    console.log(\'express app is Running....\');
});


访问 login.html 不省略第一个参数时:
在这里插入图片描述

访问 login.html 省略第一个参数时:

// 当省略第一个参数的时候, 则可以通过省略 \'/public\' 的方式来访问对应资源
app.use(express.static(\'./public/\'));

​		[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-n3t6nUSn-1630378931791)(img/image-20210327150216653.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ksZMWqZk-1630378931795)(img/image-20210327150238262.png)]

特殊写法:

// 必须是 /a/public 目录中的资源具体路径
// 可以理解为  \'/a/\' 是 \'/public/\' 的别名
app.use(\'/a/\', express.static(\'./public/\'));

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lbxpSdRf-1630378931798)(img/image-20210327150914564.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5uyvmncu-1630378931801)(img/image-20210327150924347.png)]

3 在 Express 中配置使用 art-template 模板引擎

安装:

npm install --save art-template
npm install --sava express-art-template

配置 :

// 第一个参数, 标识, 当渲染以 .html结尾(可更改)的文件的时候, 使用 art-template模板引擎
// express-art-template 是专门用来在 Express 中把 art-template 整合到 Express 中
// 虽然外面这里不需要加载 art-template , 但是也必须安装
// 原因就在于 express-art-template 依赖了 art-template
app.engine(\'html\', require(\'express-art-template\'));

使用:

// Express为 Response 响应对象提供了一个方法: reader
// reader 方法默认是不可以使用的, 但是如果配置了模板引擎就可以使用了
// res.render(\'html模板名\',{模板数据});
// 第一个参数不能写其他路径, 默认会去项目中的 views 目录查找该模板文件

app.get(\'/\', (req, res) => {
    res.render(\'404.html\');
});




如果想要修改默认的 views目录, 可以这么做:

app.set(\'views\',要修改的路径);

实例演示

// E:\Exercises\Node\express-demo\feedback-express\express使用art-template.js
const express = require(\'express\');

const app = express();
// 配置
app.engine(\'html\', require(\'express-art-template\'));

// 使用
app.get(\'/\', (req, res) => {
    res.render(\'404.html\');
});

app.get(\'/admin\', (req, res) => {
    res.render(\'admin/index.html\', {
        title: \'管理系统\'
    });
});


app.listen(3000, () => {
    console.log(\'running....\');
});

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JukhnjHz-1630378931803)(img/image-20210327155156766.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nyNj8WeN-1630378931804)(img/image-20210327155207428.png)]

4 在Express 中获取表单 POST 请求体数据

在 express 中没有内置获取表单 POST请求体的 API , 这里需要使用一个第三方包 : body-parser

安装:

npm install --sava body-parser

配置:

var express = require(\'express\')
// 0. 引包
var bodyParser = require(\'body-parser\')

var app = express()

// 配置 body-parser
// 只要加入这个配置, 则在 req请求对象上会多出来一个属性: body
// 也就是说可以直接通过req.body 来获取表单 POST请求体数据
// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }))

// parse application/json
app.use(bodyParser.json())

app.use(function (req, res) {
  res.setHeader(\'Content-Type\', \'text/plain\')
  res.write(\'you posted:\n\')
  // 可以通过 req.body 来获取表单 POST 请求体数据
  res.end(JSON.stringify(req.body, null, 2))
})

5 在Express 中获取表单 GET 请求参数

Express 内置了一个 API , 可以直接通过 req.query来获取

req.query

分类:

技术点:

相关文章: