zoukankan      html  css  js  c++  java
  • Node js 入门指南(1)

    Node Js

    定义

    Node Js 是一个运行在服务器端的JavaScript。基于一个Chrome JavaScipt 运行时建立的一个平台

    特点

    • 事件驱动I/O服务端
    • 基于V8引擎
    • 速度快,性能好
    • node -v 查看node js 版本号
    • 使用common js 规范

    Node使用方式

    • REPL 交互模式 在当前目录的cmd当中输入node
    • 退出交互模式 .exit
    • 或者node 直接打开文件
    • 采用require() 方法引入要使用的模块
    • 采用 module.exports 导出文件
    • 声明全局变量时,使用全局对象 global

    Tip: 使用导出文件的注意事项

    • exports 默认指向 module.exports 导出作用只有module.exports才拥有。但是如果exports指向了新对象,那么就没有导出作用
    // 第一种
    module.exports = {
        a:a,
        b:b
    }
    
    //第二种 不推荐使用
    module.exports.a=a
    module.exports.b=b
    
    //第三种
    exports.a = a
    exports.b = b
    
    
    • 我们可以使用解构赋值来读取变量
    • 引用传递 深浅拷贝
    let obj = {
        a:1,
        b:2
    }
    
    let obj2 = obj
    obj2.a = "lisi"  //该表obj2 会影响到obj
    console.log(obj2) // {a:lisi,b:2}
    console.log(obj)  // {a:lisi,b:2}
    
    //利用解构赋值来进行浅拷贝
    
    let obj3 = { ...obj }
    
    let obj4 = Object.assign({}, obj)
    
    • node js 采用 common js 规范
    • 包管理的配置文件 npm init -y 或者 yarn 根据package.json重新下载依赖
    • 下载新的配置文件yarn add 或者 npm i

    Node 内置模块

    http 模块

    定义

    服务器模块

    使用方法

    1. 引入内置对象 http
    2. 创建一个服务器
    3. 解决中文乱码 响应头
    4. 响应结束 end () end里面只能传字符串类型的数据且只能有一个
    5. 安排监听接口
    const http = require("http");
    const chalk = require("chalk") //改变在服务器中输出的颜色
    
    let ser = http.createServer((req,res)=> {
        res.writeHead(200,{"Content-type":"text/html;charset=utf-8"})
        res.end("hello,world")
    })
    
    ser.listen(3000, ()=> {
        console.log(123)
    })
    
    

    fs 模块

    定义

    读写文件

    使用方法

    1. 引入fs模块
    2. 读取写入文件时候 ./ 必须写 路径必须写全

    读取文件方式

    同步读取
    let str = fs.readFileSync("./a.txt","uft-8")
    
    异步读取
    //异步读取的回调函数错误优先
    fs.readFile("./a.txt","uft-8",(err,data)=> {
        if(!err){
            console.log(data)
        }    
    })
    

    写入文件方式

    同步写入
    // 写入文件
    fs.writeFileSync("./a.txt","rush b ","utf-8")
    // 追加内容
    fs.appendFileSync("./a.txt","今夜","utf-8")
    
    // 可以创建一个文件
    fs.writeFileSync("./b.txt","cccc","utf-8")
    
    异步写入
     fs.writeFile("./b.txt","这是异步","utf-8",(err,data)=> {
         if(!err){
             console.log(data)
         }
     })
    

    流方式

    读取流
    //读取流
    let ws = fs.createReadStream("./a.txt")
    let str = ''
    
    //监听数据事件
    ws.on("data",(thunk)=> {
        str += thunk
    })
    //数据传输完成
    ws.on("end",()=> {
        console.log(str)
    })
    
    写入流
    let ws = fs.createWriteStream("./a.txt");
    //写入内容
    ws.write("xiaolaji","utf-8")
    
    复制一个文件
    const fs = require("fs");
    
    
    
    var rs = fs.createReadStream("./a.txt");
    
    var ws = fs.createWriteStream("./acopy.txt");
    
    
    
    //把rs的内容赋值到ws当中
    
    rs.pipe(ws);
    
    
    

    创建一个服务器

    • 先引入内置对象http

    • 然后创建一个服务器,req是请求,res是响应

    • 响应头

    • 响应结束 end

    • 安排监听接口

    • 注意:res.end() 里面只能传字符串类型的数据,且只能有一个

    const http = require("http");
    
    const chalk = require("chalk")
    
    
    
    let ser = http.createServer((req,res)=> {
    
      res.writeHead(200,{"Content-type":"text/html;charset=utf-8"})
    
      res.end("hello,world")
    
    })
    
    
    
    ser.listen(3000, ()=> {
    
      console.log(123)
    
    })
    

    path内置模块

    path.join 与 path.resolve 的区别

    • path.join() 将多个参数字符串拼接起来合成一个路径字符串

    • path.resolve() 以程序为根目录作为起点,根据参数解析出来一个绝对路径

    • __dirname 当前目录的绝对路径

    • __filename 当前文件的绝对路径

    • path.extname 获取当前文件的扩展名

    url内置模块

    url.parse()方法 用于将url地址转换为一个对象

    url.format() 将一个url对象转换为字符串

    使用方法

    const express = require("express")
    const url = require("url")
    const router = express.Router()
    
    router.get("/hello",(req,res,next)=>{
        //第二个参数可以将query我们请求的?后面的参数转换为一个对象 在这个例子当中我们是这样访问的  /hello?n=1
        let obj = url.parse(req.url,true)
        if(obj.query.n ==1){
            next()
        }else{
            res.send("hello world")
    
        }
    })
    

    express框架

    简介

    一个基于node js 的极简web框架 同种类的有 koa2 eggs adonis js

    快速入门

    下载express

    yarn add express

    核心概念:中间件(middlware)

    可以拦截我们的请求,是一些先存在的函数,可以替我们完成很多工作。

    存在于请求和响应中间

    手写路由
    • 路由有级中间件,应用级中间件 两种
    //第一步 引入express模块
    const express = require("express")
    
    //第二步 实例化
    let app = express()
    
    //使用 static中间件 读取静态资源 默认读取public目录下的index.html文件
    app.use(express.static(path.join(__dirname,'public')))
    //第三步 模拟请求
    app.get("/hello",(req,res)=> {
        res.send("hello world")
    })
    
    //如果请求不存在的接口我们可以使用通配符来读取这个请求
    app.get("*",(res,req)=>{
        res.send("404 NotFound! 该页面不存在")
    })
    
    //第四步 启动端口
    app.listen(3000,()=>{
       console.log("listen 3000....")
    })
    
    把我们的请求放在一个文件当中就形成了路由
    • 新建一个
    const express = require("express")
    let router = express.Router()
    
    router.get("/hello",(req,res,next)=> {
        res.send("hello world1")
        //如果存在请求路径相同的情况 会被第一个拦截 如果写next就可以访问第二个
        next() 
    })
    router.get("/hello",(req,res)=> {
        res.send("hello world2")
    })
    router.get("*",(res,req)=>{
        res.send("404 NotFound! 该页面不存在")
    })
    module.exports = router
    

    实际结构

    文件结构

    image-20200107203040923

    应用级中间件 根目录当中的index.js

    image-20200107203157025

    路由级中间件

    image-20200107203403216

    APIDOC

    可以根据注释 生成一个接口文档

  • 相关阅读:
    我异常-VS2012“System.AccessViolationException: 试图读取或写入保护内存。”
    JAVA学习笔记 -- JDBC及其应用
    创建Windows类别
    非递归二叉树遍历
    如何使用Maven创建web工程(详细步骤)
    HDOJ 3966 Aragorn's Story
    SQLServer-----SQLServer 2008 R2卸载
    hdu 4869 Turn the pokers
    MTK6572横屏的调试过程
    【MongoDB】Serveral common command of MongoDb
  • 原文地址:https://www.cnblogs.com/Rembang/p/12163707.html
Copyright © 2011-2022 走看看