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

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

posted @ 2020-01-07 21:00  南望先生  阅读(147)  评论(0编辑  收藏  举报