拉勾技术人年薪【50W+】成长计划!

为什么我们要学习Node.js?

  1. 认为:
    • Node.js就学习一周,时间比较短,不重要
    • 将来工作我后端又不用Node.js做,我们又java/python/php/c,为什么要在意它
    • Node.js接下来项目中又不用,不用好好学,不用在意
  2. 重要性?
    • Node.js可以说是对js功能的扩展,比如: Node.js可以操作文件,数据库
    • Node.js是webpack的底层语言,如果Node.js不了解,那么我们webpack学不好
    • Node.js是现在vue/React中构建项目的一环,如果学不好,那么会导致Vue/React基础不好
    • Node.js可以充当前后端连接的一个桥梁
    • Node.js也可以当做后端这个角色来看,如果我们想和后端配合的更好,那么我们必须了解后端,Node.js可以说是我们接触后端的一个方式
    • Node.js现在已经成为很多企业的职位要求了
  3. Node.js 是一个基于Chrome V8 引擎的JavaScript运行环境
    • 服务端的js有什么能力?(服务器)
  4. Node.js使用了一个事件驱动、非阻塞式I/O的模型,使其轻量又高效
    • Node.js功能
      • 事件驱动
      • 非阻塞I/O模型【 异步的输入输出,比如: 文件操作、数据库操作 等 】

Node.js文件的运行?

  1. 使用Node.js编译器
  2. 使用命令运行

Node.js文件的实时监听改动

  1. nodemon

Node.js版本

  1. Current [ 最新的版本 ] - 小白鼠
  2. LTS - 长期稳定版本

Node.js的模块化问题

  1. Node.js采用了Common.js模块化
  2. 应用
    • 内置模块 -> 可以直接使用
const fs = require('fs') // Common.js 模块引入方式
/* 
  * fs 是一个对象
    * 定义的fs 其实拿的是一个地址,地址我们希望是稳定不变的,所以const
*/

// fs.readFileSync // 同步读
// fs.readFile // 异步读 
  • 第三方模块 -> Node.js没有的 类似于插件
/* 
  * 类似插件
    * 我们现在想在我们的当前文件中引入带有功能的插件
    * 前端第三方模块全部都在一个网站中: www.npmjs.com 
  * 使用
    *  1. 安装【 npm/cnpm/yarn 】  
    *  2.  cnpm i request -S/-D
      *  -S  生产环境
      *  -D  开发环境  
      * 
  * 问题: 这里是否存在跨域?
      * 不存在   Node.js是运行在服务端的,不是浏览器端,没有同源策略
      * 
  ! 总结
      ! 第三方模块使用? 将来别人项目中使用了你没有用过的东西,怎么办?
        ! 1. npm.js 查阅文档
        ! 2. 先写单案例测试
        ! 3. 记录使用文档,记录自己博客中

*/

const request = require('request')

request('https://m.lagou.com/listmore.json', function (error, response, body) {
  console.log('error:', error); 
  console.log('statusCode:', response && response.statusCode); 
  console.log('body:', body); 
});
  • 自定义模块
/* 
  * 自定义模块
    * 自己创建模块,自己使用
    * 类型: 
      *  1. 函数
      *  2. 对象
      *  3. 字符串
*/


// 1. 定义模块
const people = {
  name: '西阁',
  sex: 'man',
  age: 18
}


// 2. 导出模块

module.exports = people 
// 3. 自定义模块导入
const people = require('./3-自定义模块定义.js')

console.log('people.name:', people.name )
  1. 模块化解决的是什么问题?
    • js中可以引用其他类型文件(html css sass )
  2. 自定义模块上传实现步骤 【 公司中应用比较多 】
      1. 创建文件夹,注意命名不要冲突
      1. 创建package.json文件
      • npm init / npm init -y
      1. 创建了 index.js, 里面封装任意一个功能
      1. 创建一个 npm.js 账号
      • 发送一个邮箱连接激活【 手动点 】
      1. 保证我们当前的源是 npm 源
      • $ nrm use npm
      1. 登录账号
      • $ npm adduser
      1. 上传
      • $ npm publish

JSON.stringify / JSON.parse

  1. 字符串、对象互相转换
  2. 拷贝
const fs = require('fs')
const data = fs.readFileSync('./data.json','utf8')//字符串
const newData = JSON.parse( data )//将JSON字符串转为一个对象
const newStr = JSON.stringify( newData )//将 JavaScript 对象转换为 JSON 字符串
const state = {
  msg: '千锋教育',
  obj: {
    x: 1,
    y: 2
  }
}
// 深拷贝 -> 1. 递归  2. JSON序列化实现
const newState = JSON.parse(JSON.stringify( state ))
newState.msg = " hello Node.js "
console.log('state',state)
console.log('newState',newState)

querystring 内置模块

  1. 使用场景
    • 用于处理url上的查找字符串
/* 
  ! querystring - 应用场景: 处理url查找字符串
    ! 1. querystring.parse      string -> object 
    ! 2. querystring.stringify  object -> string
    ! 3. querystring.escape     中文转码
    ! 4. querystring.unescape   中文解码
*/
const qs = require('querystring') 
const url = require('url')
// console.log("西阁: qs", qs)
// ! 1. parse
const str = 'https://detail.tmall.com/item.htm?spm=a230r.1.14.6.7a344d82XrCvx0&id=604098442154&cm_id=140105335569ed55e27b&abbucket=2'
const newObj = qs.parse(url.parse( str ).query,'&','=')
// console.log("西阁: newObj", newObj)
/* 
   {
    spm: 'a230r.1.14.6.7a344d82XrCvx0',
    id: '604098442154',
    cm_id: '140105335569ed55e27b',
    abbucket: '2'
  }
*/

// ! 2. stringify
const newStr = qs.stringify( newObj )
// console.log("西阁: newStr", newStr)


// ! 3. escape

const str1 = 'city=北京' 

const city = qs.escape( str1 )
console.log("西阁: city", city) // city%3D%E5%8C%97%E4%BA%AC

// !4. unescape 

const cityCape = qs.unescape( city )
console.log("西阁: cityCape", cityCape)

path

  1. 使用场景
    • 用于处理绝对路径/磁盘路径
  2. 问题: 浏览器中全局对象是?Node.js全局变量?
    • 浏览器中全局对象: window
    • Node.js全局变量: global
const path = require('path')
console.log("西阁: path", path)


// console.log( __dirname ) // 全局变量       
/* e:19111-Node.jsday01code5-内置模块  */


// const pathUrl = path.join( __dirname, 'aa')
const pathUrl = path.resolve( __dirname, 'aa')
console.log("西阁: pathUrl", pathUrl)
内容来源于网络如有侵权请私信删除