express 学习

文章介绍了如何安装和使用Express创建web服务器,包括设置get和post请求,处理URL参数,静态资源托管,路由模块化以及中间件如body-parser和自定义中间件的使用。此外,还讨论了CORS和JSONP在解决跨域问题中的应用。
摘要由CSDN通过智能技术生成

1.安装express 

npm install express@4.17.1

2.安装nodemon

便于调试node.js   不用一直手动重启 

npm install -g nodemon

使用nodemon:node 文件路径  修改为nodemon  文件路径

express创建基本的web服务器步骤:

1.导入express

const express =require('express')

2.创建express实例

const app = express() 

3.启动express实例

app.listen(80,()=>{
      console.log('express server run in http://127.0.0.1')
    }
)

express的请求

1.express的get请求

app.get('/good/get',(req,res)=>{
      res.send({name:'商品名称',id:1})
    }
)

2.express的post请求

app.post('/good/post',(req,res)=>{
res.send()
})

6.获取请求url上的参数

app.get('/goods/get',(req,res)=>{
const param=req.query//得到的是对象
})

7.获取url上的动态参数

app.get('/goods/get/:id',(req,res)=>{
//req.params默认为一个空对象
const params=req.params
res.send(params)
})

8.express向外托管静态资源

app.use(express.static('访问前缀',文件夹路径))

例:publice文件夹中有image、css、js三个文件夹   

使用静态托管之后 可以直接使用 http://127.0.0.1:80/image/......jpg 访问里面的内容(不用添加public)

添加了前缀时 可通过 http://127.0.0.1:80/前缀/image/......jpg 进行访问

托管多个静态文件夹时 可使用多个app.use(express.static(文件目录))

9.express路由

express有3个组成部分 

1.请求类型

2.请求url路径

3.处理函数

app.get/post(url,(req,res)=>{
res.send()//响应客户端
})

路由的匹配会按照路由的定义顺序进行 当请求类型和请求url匹配成功就执行对象的处理函数

路由的最简单用法就是以上写法 直接将路由挂在到app上

但为了便于管理路由 需要将路由进行模块化拆分

express路由模块化

1.创建对应模块的js文件 如goods.js   user.js   role.js  存放在router文件夹中

2.调用express.Router()函数创建路由对象

例:user.js文件

// 1.引入express
const express = require("express");

// 2.创建路由实例对象
var router = express.Router();
// 挂载具体的路由(接口)
router.get("/user/get", (req, res) => {
  res.send({ name: "用户名" });
});
router.get("/user/add", (req, res) => {
  let name = req.params.name;
  res.send({ name: "添加的用户名为" + name });
});
// 3.向外导出路由对象
module.exports = router;

注册路由对象:

1.导入路由模块 

2.注册路由模块

在router文件夹下创建index.js

内容:

const express = require("express");
const app = express();

//引入各个路由模块
const goods = require("./goods");
const user = require("./user");
const role = require("./role");

// 注册使用各个路由模块
app.use(goods, user, role);
// 导出路由表  在app.js中引入使用
module.exports = app;

在app.js中引入路由表 并统一添加前缀 /api

// 1.引入express
const express = require("express");
// 2.创建express实例对象
const app = express();

// 引入路由表
const router = require("./router");
// 统一为路由添加前缀/api
app.use("/api", router);

//3.启动服务器
app.listen(80, () => {
  console.log("run in http://127.0.0.1:80");
});

express中间件

没配置任何处理数据的中间件时 拿到的req.body默认为undefind

body-parser中间件:将客户端请求中的body中的表单数据进行转换(postman中body中的x-www-form-urlencoded类型

需要转换json格式的可使用内置中间件app.use(express.json())

1.安装中间件 body-parser

npm install body-parser

2.导入中间件

// 导入中间件 处理req.body中的数据
const parser = require("body-parser");

3.使用中间件

// 注册使用中间件
app.use(parser.urlencoded({ extended: false }));

body-parser中间件与内置中间件作用一样  也可以直接使用内置中间件

//内置中间件  不需要安装
app.use(express.urlencoded({ extended: false }));

自定义中间件

需要监听req的data和end

const express = require("express");
// 引入内置querystring模块
const qs = require("querystring");
// 2.创建express实例对象
const app = express();
let str = "";
// 监听data
app.use((req, res, next) => {
  req.on("data", (chunk) => {
    str += chunk;
  });
  // 监听end
  req.on("end", () => {
    // console.log(str);
    //   调用querystring的parser方法
    const body = qs.parse(str);
    // 将req的body属性修改为解析出来的body
    req.body = body;
    next();
  });
});

// 导出中间件
module.exports = app;

// 自定义中间件进行转换
// const myquerystring = require("./util/iqueryString");
// app.use(myquerystring);

使用cors中间件解决跨域:

1.安装中间件

npm install cors

2.导入中间件

const cors = require('cors')

3.在路由前使用中间件

app.use(cors())

使用cors跨域资源共享 

cors响应头:Access-Control-Allow-Orign

允许部分域名下的请求 如 只允许http://baibu.cn的请求

res.setHeader("Access-Control-Allow-Orign", "http://baibu.cn");

res.setHeader("Access-Control-Allow-Orign", '*');//允许所有域名的请求

cors响应头:Access-Control-Allow-Headers

默认情况下,cors仅支持客户端向服务器发送9个请求头:

        Accept、Accept-Language、Content-Language、DPR、Downlink.Save-Data、Viewport-Width、Width、Content-type(仅限于text/plain、multipart/form-data、application/x-www-urlencoded三者之一)

如果需要发送额外的请求头 则需要在服务器端 通过 Access-Control-Allow-Headers对额外的请求头进行声明,否则会请求失败

 // 多个请求头之间使用英文逗号进行分割
    res.setHeader('Access-Control-Allow-Headers','Conten-Type,X-Custom-Header')

cors响应头:Access-Control-Allow-Methods

默认情况下 cors仅支持客户端向服务器发送 GET、POST、HEAD请求

如果想要通过PUT、DELETD等方式进行请求 则服务器要进行指明实际请求允许的HTTP方法

    // 只允许 get post delete head请求方式
    res.setHeader('Access-Control-Allow-Methods', 'POST,GET,DELETE,HEAD')
    // 允许所有请求方式
    res.setHeader('Access-Control-Allow-Methods', '*')

JSONP接口

注意事项:jsonp接口仅支持get请求方式,使用cors中间件解决跨域时  jsonp接口要放在cors之前

// jsonp接口
app.get("/api/jsonp", (req, res) => {
  // 1.获取客户端发送过来的回调函数的名字
  const fnName = req.query.callback;
  // 2.得到要通过JSONP形式发送给客户端的数据
  const data = { name: "hellow", age: 50 };
  // 3.根据前两步得到的数据 拼接出一个函数调用的字符串
  const str = `${fnName}(${JSON.stringify(data)})`;
  //4.将拼接得到的字符串响应给客户端
  res.send(str);
});

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值