nodejs笔记【7express框架初识】

express框架


1. 问题


1.1 下面报错原因及解决方法

在这里插入图片描述

报错原因:

  • 还没有安装nodemon包。
    • 解决方法:全局安装nodemon
    • 命令npm install nodemon -g
  • 已安装,但命令行未初始化。

2. 编写路由的两种写法


2.1 使用express编写路由

// 引入express
const express=require('express');
// 创建一个web程序
const app =express()
// 添加路由
// 使用express编写路由
app.get('/',(req,res)=>{
    res.send('home')
})
app.get('/list',(req,res)=>{
    res.send('list')
})

// 启动服务
app.listen(3000,()=>{
    console.log('Server is running at http://127.0.0.1:3000');
})

在这里插入图片描述

2.2 使用node.js编写路由

// 使用node.js编写路由
// 引入系统模块 http
// const 是常量 不可修改
const http = require('http');
// 创建 http 服务  设置常量接收
const app = http.createServer();

app.on('request',(req,res)=>{
    if(req.url == '/' && req.method =='GET'){
        res.end('home')
        // console.log(aaa);
    }else if(req.url == '/list' && req.method =='GET'){
        res.end('list')
    }
})

// 启动服务
app.listen(3000,()=>{
    console.log('Server is running at http://127.0.0.1:3000');
})

在这里插入图片描述

3. sendend的区别


在这里插入图片描述

3.1 区别

在这里插入图片描述

  • send方法根据参数,自动设置响应头中的 Content-type 属性的值(自动根据返回内容,来设置 Content-type 属性的值)
  • end却不会自动设置

3.2 如何让end也有Content-type属性的值

在这里插入图片描述

  • 只有手动设置,自己在返回前来设置Content-type属性的值

    res.setHeader('Content-type','text/html')
    

4. 中间件


在这里插入图片描述

4.1 中间件概念

中间件就是一堆方法,可以接收客户端发来的请求、可以对请求做出响应,也可以将请求继续交给下一个中间件继续处理。

在这里插入图片描述

中间件主要由两部分构成,中间方法以及请求处理函数

例子:
我开了一家炸鸡店(业务端),然而周边有太多屠鸡场(底层),为了成本我肯定想一个个比价, 再综合质量挑选一家屠鸡场合作(适配不同底层逻辑)。由于市场变化,合作一段时间后,或许性价比最高的屠鸡场就不是我最开始选的了,我又要重新和另一家屠鸡场合作,进货方式、交易方式等等全都要重来一套(重新适配)。

然而我只想好好做炸鸡,有性价比高的肉送来就行。于是我找到了一个专门整合屠鸡场资源的第三方代理(中间件),跟他谈好价格和质量后(统一接口),从今天开始,我就只需要给代理钱,然后拿肉就行。代理负责保证肉的质量,至于如何根据实际性价比,选择不同的屠鸡场,那就是代理做的事了。

4.2 代码案例解释

// 引入express
const express=require('express');
// 创建一个web程序
const app =express()


app.get('/list',(req,res,next)=>{
    console.log('list1');
    next() // 执行下一个中间件
})
app.get('/list',(req,res)=>{
    res.send('list2')
})

// 启动服务
app.listen(3000,()=>{
    console.log('Server is running at http://127.0.0.1:3000');
})

在这里插入图片描述

4.3 代码解释的时候提到的use

use 方法可以处理各种类型的请求(get、post、put、delete。。。。)

1、能够捕获各种类型的请求

2、能够捕获各种资源的请求

// 引入express
const express=require('express');
// 创建一个web程序
const app =express()
/**
 * use 方法可以处理各种类型的请求(get、post、put、delete。。。。)
 * 1、能够捕获各种类型的请求
 * 2、能够捕获各种资源的请求
 */
app.use((req,res,next)=>{
    let isLogin = true
    if(isLogin){
        next() // 继续执行后面的匹配
    }else{
        res.send({msg:'必须登录才可以访问此api'})
    }
})
app.get('/api/blog/list',(req,res)=>{
    res.send({msg:'list'})
})
app.get('/api/blog/del',(req,res)=>{
    res.send({msg:'del'})
})
app.get('/api/blog/update',(req,res)=>{
    res.send({msg:'update'})
})

// 如果用户请求的地址不能匹配上面的任何一个
// 可以执行下面的代码
app.use((req,res,next)=>{
    res.send(404,服务器内部错误)
})

// 启动服务
app.listen(5000,()=>{
    console.log('Server is running at http://127.0.0.1:5000');
})

在这里插入图片描述

上面一个响应

// 如果用户请求的地址不能匹配上面的任何一个
// 可以执行下面的代码
app.use((req,res,next)=>{
    res.send(404,服务器内部错误)
    // res.status(404).send('not found')
})

在这里插入图片描述

5. 路由分组


当有多个路由时,一类的可以进行分组

在这里插入图片描述

5.1 express方法

// 引入express
const express=require('express');
// 创建一个web程序
const app =express()

// 创建路由对象
const blog = express.Router()
// 使用 app.use 中间件关联 blog 路由对象
app.use('/api/blog',blog)

blog.get('/list',(req,res)=>{
    res.send({msg:'list'})
})
blog.get('/del',(req,res)=>{
    res.send({msg:'del'})
})
blog.get('/update',(req,res)=>{
    res.send({msg:'update'})
})

// 启动服务
app.listen(5000,()=>{
    console.log('Server is running at http://127.0.0.1:5000');
})

在这里插入图片描述

5.2 整合,变清爽

  • app.js文件
  • router目录
    • blog.js文件
    • user.js文件

app.js文件

// 引入 express
const express = require('express')
// 创建一个web程序
const app = express()

const blog = require('./router/blog')
const user = require('./router/user')

app.use('/api/blog',blog)
app.use('/api/user',user)

// 启动服务
app.listen(3000,()=>{
    console.log('Server is runnint at http://127.0.0.1:3000');
})

blog.js文件

const express = require('express')


// 创建 express 的路由对象
// 创建一个路由对象,与blog相关的所有api都注册到这个路由对象上
const blog = express.Router()
blog.get('/list', (req, res, next) => {
    res.send({ msg: 'list' })
})
blog.get('/del', (req, res) => {
    res.send({ msg: 'del' })
})
blog.post('/new', (req, res) => {
    res.send({ msg: 'new' })
})
blog.post('/update', (req, res) => {
    res.send({ msg: 'update' })
})
module.exports = blog

user.js文件

const express = require('express')
const user=express.Router()
user.get('/list', (req, res) => {
    res.send({ msg: '用户列表' })
})
user.get('/detail', (req, res) => {
    res.send({ msg: '用户信息' })
})
user.post('/new', (req, res) => {
    res.send({ msg: '新增用户' })
})
user.post('/update', (req, res) => {
    res.send({ msg: '修改用户' })
})
user.get('/del', (req, res) => {
    res.send({ msg: '删除用户' })
})
user.get('/login', (req, res) => {
    res.send({ msg: '用户登录' })
})
user.get('/logout', (req, res) => {
    res.send({ msg: '用户退出' })
})
module.exports=user
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值