【node】node常用方法及模块化介绍

node.js是什么

  • node.js是一个运行环境(V8 + 内置API)

  • 内置API:

    • fs模块(读写)

      const fs = require('fs')
      
      fs.readFile('文件路径','utf-8',(err,data) => {
           // err代表错误
          if(err) {
              console.log('读取失败,错误信息为:'err.message)
          }
         //  data代表成功的结果
          console.log(data)
      }) 
      fs.writeFile('文件路径','写入的内容',(err) => {
           // err代表错误
          if(err) {
              console.log('写入文件失败:'err)
          }
          console.log('写入文件成功')
      }) 
      
    • path模块(配置路径)

      const path = require('path')
      // path.join 拼接路径 __dirname绝对路径 拼接上具体的地址,可以实现在任意位置访问具体的地址
       const url = path.join(__dirname, '具体的路径')
      
    • http模块(本地服务器)

      const fs = require('fs')
      const path = require('path')
      const http = require('http')
      // 启动服务
      const server = http.createServer()
      // 注册request事件 
      server.on('request', (req, res) => {
          // req是请求 res是响应
          // req.url() 请求路径 req.method() 请求方式
          // path.join 拼接路径 __dirname绝对路径 拼接上具体的地址,可以实现在任意位置访问具体的地址
      
          const url = path.join(__dirname, './index.html')
          console.log(req.url)
          // 如果为默认的地址,则跳转到index.html 页面
          if (req.url === '/') {
              req.url = '/index.html'
          }
          if (req.url === '/index.html') {
              // console.log('有人来啦')
              fs.readFile(url, 'utf-8', (err, data) => {
                  if (err) {
                      // err.message 失败信息
                      return console.log('读取失败', err.message)
                  }
                  // data 成功的结果
                  console.log(data)
                  // 为了防止中文显示乱码的问题,需要设置响应头 Content-Type的值为 text/html; charset=utf-8 
                  // 请求头必须设置在end上方 否则不生效
                  res.setHeader('Content-Type', 'text/html; charset=utf-8');
                  const str = `这个是请求路径 ${req.url},这个是请求方式 ${req.method}`;
                  // res.end()方法的作用: 向客户发送指定的内容, 并结束这次请求的处理过程
                  res.end(str)
              })
          } else {
              console.log('404 Not Default')
          }
      
      })
      server.listen(8080, () => {
          console.log('启动成功')
      })
      

模块化

node.js一个js文件就是一个模块(自定义模块)

node.js遵守common.js语法规范

  • 导入(引入) require()

  • 无论是内置的、自定义、第三方模块,都是require导入

  • 区别

    • 内置的:第三方模块 require(‘模块名’)
    • 自定义 require(‘相对路径’)
  • 导出(把模块内给共享出去)

  • module.exports.xxx = yyy

  • module.exports = {xxx}

    require()的结果就是模块导出的对象 (module.exports)

  • npm(包管理工具)

  • 下包 npm i 包名1 包名2 包名3

  • 卸载 npm un 包名

  • 下指定版本的包 npm i 包名@指定版本号

  • 下包之前 通常会有一个初始化操作 npm init -y

  • 全局包 nrm 可以提供(切换)下包的服务器

  • 下nrm包:npm i nrm -g -g表示全局以后可全局使用

  • 查看有哪些服务器: nrm ls

  • 测速: nrm test

  • 使用:nrm use taobao

  • npm 下包 nrm切换下包服务器

  • 本地安装 npm i 包名 包只能在当前项目中使用 会下载到node_modules 目录中

    • 如果在GitHub或者码云上克隆下来的项目,没有node_modules目录是正常的
    • 执行npm i 会找package.json里面的dependecies,并且安装所有的包
  • 全局安装 npm i 包名 -g 包会提供命令,实在终端中使用

  • 卸载全局包 npm un 包名 -g

  • nodemon

  • 只要文件修改了,自动重启

  • 下包:npm i nidemon -g

  • 使用nodemon 执行的js文件

  • 退出 ctrl + c

  • node 执行对应js文件

  • npm 下包 卸载包 工具

  • nrm 切换下包的服务器

  • nodemon 执行对应js文件,只要文件修改了,自动重启

ES6模块语法

ES6 模块化规范是浏览器端与服务器端通用的模块化开发规范。

ES6 模块化规范中定义:

  • 每个 js 文件都是一个独立的模块
  • 导入其它模块成员使用 import 关键字
  • 向外共享模块成员使用 export 关键字

ES6 的模块化主要包含如下 3 种用法:

  • 默认导出与默认导入
  • 按需导出与按需导入
  • 直接导入并执行模块中的代码

在nodejs环境中,想要使用ES6模块化语法,在 package.json 文件中 "type": "module"

默认导出与默认导入

默认导出的语法: export default 默认导出的成员

默认导入的语法: import 接收名称 from '模块路径'

  • 导出
const a = 10
const b = 20

const fn  = () => {
  console.log('这是一个函数')
}

// 默认导出
// export default a  // 导出一个值
export default {
  a,
  b,
  fn
}
  • 导入
// 默认导入时的接收名称可以任意名称,只要是合法的成员名称即可
import result from './xxx.js'
console.log(result)

注意点:

  • 每个模块中,只允许使用唯一的一次 export default
  • 默认导入时的接收名称可以任意名称,只要是合法的成员名称即可

按需导入与按需导出

按需导出的语法: export const s1 = 10

按需导入的语法: import { 按需导入的名称 } from '模块标识符'

export const a = 10
export const b = 20
export const fn = () => {
  console.log('内容')
}

按需导入的语法

import { a, b as c, fn } from './xxx.js'

注意事项:

  • 每个模块中可以有多次按需导出
  • 按需导入的成员名称必须和按需导出的名称保持一致
  • 按需导入时,可以使用as 关键字进行重命名
  • 按需导入可以和默认导入一起使用

直接导入模块(无导出)

如果只想单纯地执行某个模块中的代码,并不需要得到模块中向外共享的成员。

此时,可以直接导入并执行模块代码,示例代码如下:

import '模块的路径'

//xxx.js
for (let i = 0; i < 10; i++) {
  console.log(i)
}


// 导入该模块
import './xxx.js'

你可能感兴趣的:(node,javascript,node.js,前端)