node.js学习

115 阅读3分钟

一、简介

大前端必备之 node.js ,有了nodejs,你可以干的事有哪些?

  1. 你可以用 VUE 写前端交互界面,用 nodejs 写后端接口 ,全栈工程师近在咫尺呀 //我就仅仅了解这个哈哈哈
  2. 统一公共类库,将代码标准化
  3. 异步编程
  4. 处理IO密集型应用
  5. 构建复杂系统
  6. 实现对于内存堆栈的监控系统

NodeJS 的特征:

浏览器能运行 JS 代码是因为其内置了 JS 的解析器。Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。

Node.js 的包管理器 npm,是全球最大的开源库生态系统。

在你的服务器上,你可以利用终端直接操作运行 JS 文件,当然也可以值显

回忆一下 WEB APIS 是浏览器对 JS 开放的内置接口,但 Node 不能操作DOM,BOM,因为他没这些接口,但他也内置了很多APIS,例如 fs 文件操作模块

二、 Node 内置模块

1、 fs模块

...

2、 Path模块

    Path . join ( __dirname, 'adr1', 'adr2' ... )     #连接多个url,../为返回上一层,./自动省略

三、 nodejs 的内置 HTTP 模块

你想自己创建服务端吗? 来来来,一起手撸个服务器吧,放心,it's so easy !

   # 简单创建http服务器
   const http = require('http')  #引入

   server = http.createServer()  #实例化

   #req ,res 分别为客户端和服务端相关的数据和信息,你可以在次拦截接收进行处理哟 eg.
   server.on('request',(req,res)=>{
       console.log('有请求过来哟!')
       res.setHeader('Content-Type', 'text/html;charset=utf-8')  #解决中文乱码
       res.body = '我是你召唤的神龙!!'
       res.end(res.body)  #送至客户端
   })

   #监听
   server.listen('8080',()=>{
       console.log('事务中心,坚持为人民服务!')
   })

四、Express web开发框架

1. Express 路由

  • 初识路由

    挂载的路由依次运行、method 和 url 须 同时匹配成功

     const express = require('express')

     const app = express()

     #挂载
     app.get('url' , (req,res)=>{
         res.send()
     })
     app.post('url', (req,res)=>{
         ...
     })

     app.listen('port', ()=>{})

  • 模块化路由
    • 抽离 router.js 文件
    • 导入并使用
        #router.js----
        
        const expree = require('express')
        const router = express.Router()

        #参上创建并挂载路由
        ...
        
        module.exports = router  #导出路由对象


        #index.js----
        const express = require('express')
        const router = require('./router.js')
        const app = express()
        app.use(router)  #全局注册中间件
        app.listen('8080',()=>{} )
    
  • 路由添加前缀

    你还记得托管静态资源的使用吗

    app.use( '前缀' , express.static(' ./file ') )

    路由也是这样,eg.

    app.use( '/api' , router )

    访问时 http://ip:port/api/url

2. Express 中间件

图示:

        graph TD
        req --> m1 --> next --> m_arry --> next --> router 

本质就是一个 function( req, res, next )

  • 全局中间件 app.use( function( req, res, next ) )
  • 局部中间件 app.get( 'url', [ m1,m2,m3... ], (req,res) => {} )

中间件使用注意点:

  1. 路由之前使用
  2. 可以衔接多个中间件进行处理
  3. 一定要 next()
  4. next()后不跟代码,以防代码逻辑混乱
  5. 多个中间件共享 req, res 对象

3. 中间件的分类

  1. 应用程序中间件,直接挂载在app上

  2. express@4.16.0 后内置的中间件

  • static()
  • express.json()
  • express.urlencoded({extended: false}) #基于第三方 body-parser

在默认情况下,客户端请求体的body在不经中间件解析下的值为 undefined

4. 自定义中间件

实现步骤:

  1. 定义中间件
  2. 监听 req 的 data 事件
  3. 监听 req 的 end 事件
  4. 使用 querystring 模块解析请求体数据
  5. 将解析出来的数据对象挂载到 req.body
  6. 将自定义中间件封装成模块
mid.js


const Mymid = require('./mid')
app.use()