Node.js学习(二)

  • 最近在学Node.js,把知识整理一下博客,这是node.js整理到第二篇博客了,方便日后查看,有需要的小伙伴也可以看哦,希望能够帮助到你哦

模块

模块的加载机制

  • 优先从缓存中加载

模块在第一次加载后会被缓存,
注意:不论是内置模块。自定义模块,第三方模块,他们都会优先从缓存中加载,从而提高模块的加载效率

  • 内置模块的加载机制

内置模块由node.js 官方提供的模块,内置模块的加载优先级最高

  • 自定义模块的加载机制

使用 require() 加载自定义模块时,必须指定./ 或 …/ 开头的路径标识符,在加载自定义模块时,如果没有./ 或 …/ 这样的路径标识符,node会把它当成内置模块或第三方模块进行加载
在 require() 导入自定义模块时,如果省略了文件的扩展名,则Node.js会按照顺序分别尝试加载以下的文件

1.按照确切的文件名加载
2.补全.js扩展名进行加载
3.补全.json扩展名进行加载
4.补全.node扩展名进行加载
5.加载失败,终端报错

  • 第三方模块的加载机制

如果没有找到对应的第三方模块,则移动到再上一层父目录中,进行加载,直到文件系统的根目录

Express

  • Express是基于node.js的平台,快速,开放,极简的web前端框架
  • 本质: 是npm 的第三方包,提供了快速创建web服务器的便捷方法
  • 中文官网:https://www.expressjs.com.cn
  • 安装命令:npm install express --save

Express 能做什么??

  • 使用 Express 我们可以方便,快速的创建Web网站的服务器和API接口的服务器

创建基本的服务器

  • 前提: 安装了 express
    // 1.导入 Express
    const express =require('express')
    // 2. 创建web服务器
    const app = express()
    // 3. 调用app.listen(端口号,启动成功的回调函数) 启动web服务器
    app.listen(8088,()=>{
        console.log('express server running at http://127.0.0.1:8088')
    })

监听 GET 请求 和 POST 请求

// 1.导入 Express
const express = require('express')
// 2. 创建web服务器
const app = express()
// 4. 监听客户端的 GET 和 POST 请求,并向客户端响应具体的内容
app.get('/user', (req, res) => {
//调用express 提供的res.send() 方法,向客户端响应一个JSON 对象
    res.send({
        name: 'lfh',
        age: 29,
        gender: '男'
    })
})
app.post('/user', (req, res) => {
    //调用express 提供的res.send() 方法,向客户端响应一个文本字符
    res.send('请求成功')
})
// 3. 调用app.listen(端口号,启动成功的回调函数) 启动web服务器
app.listen(8088, () => {
    console.log('express server running at http://127.0.0.1:8088')
})

如何获取url 中传递的参数呢?

通过req.query 对象可以访问到客户端通过查询字符串的形式,发送到服务器到参数
  • 注意: 默认情况下,req.requry是一个空对象{}
/*在浏览器中请求接口
* http://127.0.0.1:8088/?user=za&age=20
* 页面显示:{"user":"za","age":"20"}
* */
// 1.导入 Express
const express = require('express')
// 2. 创建web服务器
const app = express()
//获取url 中传递的参数呢
app.get('/',(req,res)=>{
    console.log(req.query)
    //通过req.query 可以获取到客户端发送过来到查询参数
    //注意: 默认情况下,req.requry是一个空对象{}
    res.send(req.query)
})
// 3. 调用app.listen(端口号,启动成功的回调函数) 启动web服务器
app.listen(8088, () => {
    console.log('express server running at http://127.0.0.1:8088')
})
通过req.params 对象,可以访问到 url 中通过 : 匹配 到的动态参数
  • 注意: 默认情况下,req.params是一个空对象{},里面存放这通过 : 动态匹配到参数值
/**
 * 浏览器输入 http://127.0.0.1:8088/user/1
 * 页面显示:{"id":"1"}
 * **/
// 1.导入 Express
const express = require('express')
// 2. 创建web服务器
const app = express()
//获取通过 : 动态匹配到参数值
// :id是一个动态的参数,也可以访问多个 /user/:id/:name
app.get('/user/:id',(req,res)=>{
    console.log(req.params)
    //注意: 默认情况下,req.params是一个空对象{},里面存放这通过 : 动态匹配到参数值
    res.send(req.params)
})
// 3. 调用app.listen(端口号,启动成功的回调函数) 启动web服务器
app.listen(8088, () => {
    console.log('express server running at http://127.0.0.1:8088')
})

托管静态资源( express.static() )
  • 注意: Express 在指定的的静态目录中查找文件,并对外提供资源的访问路径,因此 存放静态文件的目录名不会存在url中
  • 如果要托管多个静态资源目录,请多次调用express.static() 函数
    const  express = require('express')
    const app = express()
    // 使用express.static() 方法,快速的对外提供静态资源
    app.use(express.static('public'))
    app.use(express.static('fiels'))
    app.listen(8081,()=>{
        console.log('express server running http://127.0.0.1:8081')
    })
    app.use(express.static('public'))
    app.use(express.static('files'))
  • 访问静态资源时,express.static() 函数会根据目录的添加顺序查找所需的文件
挂载路径前缀
  • 如果希望在托管的静态资源访问路径之前,挂载路径前缀,则可以用如下的方式
    app.use('/public',express.static('public'))

nodemon (自动重启项目)

  • 安装命令: npm install -g nodemon

express 路由

  • 在express中路由指的是 客户端的请求 与服务器处理函数 之间的映射关系
  • express 的路由由三部分组成,分别是,请求的类型,请求的url地址,处理函数,格式如下
    app.METHOD(PATH,HANDLER)

路由的匹配过程

  • 每当一个请求到达服务器后,需要先经过路由的匹配 只有匹配成功时,才会调用对应的 处理函数
  • 在匹配时,会按照路由的顺序进行匹配,如果请求类型请求url 同时匹配成功,则 express 会将这次请求,转交给对应的function 函数进行处理。
  • avatar

路由最简单的方式

    const  express = require('express')
    const app = express()
    // 挂载路由
    app.get('/',(req,res)=>{
        res.send('get请求')
    })
    app.post('/login',(req,res)=>{
        res.send('post请求')
    })
    app.listen(8086,()=>{
        console.log('http://127.0.0.1:8086')
    })

路由模块化

将路由抽离成单独模块的步骤如下(创建路由模块)
  1. 创建路由对应的.js文件
  2. 调用express.Roter() 函数,创建路由对象
  3. 向路由对象挂载具体的路由
  4. 使用module.exports 向外共享路由对象
  5. 使用app.use() 函数注册路由模块

注册路由模块

  • 导入路由模块: const router = require(‘router’)
  • 注册路由模块: app.use(router)

为路由模块添加前缀

  • app.use(‘/api’,router)

例子: 路由模块是一个js文件,注册路由是一个js文件

  • router.js
    /**
     * 路由模块
     * **/
    const express = require('express')
    const router = express.Router()
    //挂载具体的路由
    router.get('/user',(req,res)=>{
        res.send('get user')
    })
    router.post('/user/delete',(req,res)=>{
        res.send('/user/delete')
    })
    
    module.exports = router
  • index.js
/**
 * 注册路由
 * **/
    const  express = require('express')
    const  app =express()
    //1.导入路由模块
    const router = require('router')
    //2.注册路由模块
    // 注意: app.use() 函数的作用就是来注册中间件
    // app.use(router)
    app.use('/api',router) //为路由模块添加前缀
    app.listen(8087,()=>{
        console.log('http://127.0.0.1:8087')
    })
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值