2023-04-01

---

noteId: "11381ab0ce9211edab7cdf73cea80b84"
tags: []


[toc]

4月1日总结

  1. Node.js是什么?

    Node.js是基于V8引擎的JS运行环境。

  2. Node.js和Express的关系

    • Node.js用于构建服务器
    • Express是一个Node框架:基于Node平台开发APP这件事变得更容易。同时对Node开发进行了扩展。

Express框架构建App的步骤

第一步:使用npm init进行初始化

mkdir myapp
cd myapp
npm init --yes

第二步:安装express

npm install express  //局部安装
npm install -g express //全局安装

第三步:导入express

New-item app.js
# 打开app.js 输入
const express = require('express')

第四步:构建APP实例

const app = express() //返回运行在node服务器上的app实例对象。

第五步:监听服务器端口3000

app.listen(3000,() => {
  '服务器已运行在: http://localhost:3000'
})

第6步:配置路由

//get请求 200成功
app.get('/',(req,res) => {
  //res.send()//发送 text/plain||text/html
  //res.sendFile() //发送文件内容  application/json
  res.render()//渲染视图模版
})
//get请求 301转向
app.get('./about-us',(req,res) => {
  res.redirect('./about')//重定向到'./about'请求
})
//get请求 404页面未找到  必须放最后
app.use((req,res) => {
  res.status(404).render('404')
})

3月31日知识点

  1. 日考知识点自己复习
  2. express的六个方法背写熟练(express入门案例)
  3. EJS是什么

3月31日

express是什么

  • express是Node.js服务器的框架。
  • express是一个Node.js的模块。

express()

定义

  • Express()是该框架的核心函数。
  • express()用于创建一个APP(Node.js + Express)。
  • express() 函数是一个顶级函数。

语法

const express = require('express')//引入模块
const app = express()//暴露函数 成为顶级函数

express()的方法

  • express.json()
  • express.static()
  • express.Router()
  • express.urlencoded()

返回值

示例

app.get()

定义

app.get()方法通过回调函数处理GET请求。

官方:通过回调函数把请求路由到指定路径。

语法

app.get(path,callback)
app.get('请求地址',回调函数) //=> 中间件函数(勾子函数)
app.get('/', (req, res) => {
  console.log(req) //req就是Node.js的request对象
  console.log(res)//res就是Node.js的response对象
})

返回值

示例

app.use()

定义

app.use()在指定路径上挂载中间件函数。

语法

app.use([path,] callback [, callback...])
app.use('路径', 回调函数)
app.use('/about',() => {})
app.use(() => {}) //不写路径,那意味着所有路径都会执行回调

返回值

示例

app.listen()

定义

app.listen() 用于为app绑定监听,监听主机端口是否有请求进来。此方法与 Node 的 http.Server.listen() 相同。

语法

app.listen([port[, host[, backlog]]][, callback])
app.listen(端口号,主机名,回调函数)

返回值

示例

res.sendFile()

定义

按照指定路径发送响应数据(作为响应数据)。

  • 根据文件扩展名设置 Content-Type 响应 HTTP 标头字段。
  • 除非在选项对象中设置了根选项,否则路径必须是文件的绝对路径。

语法

res.sendFile(path [, options] [, fn])
res.sendFile('路径' {选项对象},回调函数)
  • path必须是一个绝对路径
  • path如果是一个相对路径,那么你必须在选项对象中设置根选项。

返回值

示例

options

定义

options 就是选项对象。

  • 它是一个对象
  • 对象里存储的是一些属性参数。
{
  path:'',
  chaset: 'utf-8'
}

res.status()

定义

设置响应的 HTTP 状态码。支持链式调用

语法

res.status(403).end()
res.status(400).send('Bad Request')
res.status(400).sendFile('/absolute/path/404.png')

返回值

返回响应对象。

示例

3月31日 ejs

ejs是什么

  • ejs是 Embedded JavaScript templating的缩写,
  • ejs的意思:嵌入js的HTML模版(不是嵌入到<script>里)。
  • ejs是面向服务端的
    • ejs是在服务端把js嵌入到html页面里
    • 服务端解析ejs语法 => 翻译成html
    • 把编译后的html返给浏览器端
    • ejs实现的功能类似于php实现的功能:动态渲染数据到HTML页面里。
  • JS是面向浏览器端的脚本语言。
  • PHP是面向服务端的脚本语言。
    • 为什么能够解析PHP,因为服务端安装了PHP软件
//ejs代码
<ul>
  <% users.forEach(function(user){ %>
    <%- include('user/show', {user: user}); %>
  <% }); %>
</ul>

app.set()

定义

app.set()方法用于:1.存储自定义值 2.配置服务器行为。

服务器行为有些特殊的字段,用于配置服务器行为:

res.render()

定义

render()方法用于编译ejs模版,把编译后的html代码发送给客户端。

语法

res.render(view [, locals] [, callback])
res.render(视图,{选项},回调函数)

选项对象:向视图传递变量

EJS的语法

  • <% 嵌入脚本的开始 控制代码流
  • %> 嵌入脚本的结束
  • <%= 出计算值
  • <%- 直接输出

3月31日:nodemon

3月30日

http模块

  • http模块是Node的内置模块。
  • http模块用于构建服务器。

1http.createServer()

定义

用于创建一个Node服务器。主要做了两件事:

  • 处理请求
  • 处理响应

语法

http.createServer({选项对象},监听函数)

选项对象:可选。是一个object,通过选项对象,传入一些参数。

监听函数:是一个回调函数。当用户请求从端口进来后,该函数立刻被调用。

  • Request对象:请求对象
    • 请求对象:包含与请求有关信息。
  • Response对象:响应对象
    • 响应对象:包含与响应有关的信息。

返回值

createServer() 方法返回一个Server对象。

示例:

2server.listen()

定义

用于监听服务器端口。

语法

server.listen()
server.listen([port[,host][,callback])
server.listen(端口,主机名,回调函数)
  • 端口: 数值
  • 主机名:字符串
  • 连接数:数值(最大511)
  • 回调函数:function

返回值

返回服务器对象

示例

3res.setHeader()

定义

用于设置响应头信息。特点:

  • 只能设置一个值
  • 多次执行
  • 优先级低于res.writeHead()

语法

res.setHeader(name, value)
res.setHeader(响应头属性名, 对应的值)

返回值

示例

res.setHeader("Content-Type","text/html")
res.setHeader("Content-Type","text/plain")
res.setHeader("Content-Type", "application/json")

4res.write()

定义

write()方法用于设置响应数据。

语法

response.write(chunk[, encoding][, callback]);
response.write(数据[,字符编码][, 回调函数]);

返回值

布尔值

示例

5res.writeHead()

定义

用于设置响应头信息。特点:

  • 设置多个值
  • 只能执行一次
  • 优先级高于res.setHeader()

语法

res.writeHead(statusCode[, statusMessage][, headers]);
res.writeHead(状态码,'状态信息',{响应头});

返回值

返回一个响应对象。以便进行链式调用。

示例

6res.end()

定义

end()用于通知服务器响应结束。该方法在响应时必须调用。

语法

response.end([data[, encoding]][, callback])
res.end('数据','字符编码',回调函数)

返回值

返回this

示例

读取文件内容

const http = require('node:http')
const fs = require('fs')

const server = http.createServer((req,res) => {
    // console.log(res);//响应对象[ServerResponse]
    // console.log(req);//请求对象[inComingMessage]
    console.log(req.url);
    //设置响应头的数据类型
    // res.setHeader('Content-Type', 'text/html;charset=utf-8')
    // res.write('<h1>你好世界</h1>')
    // res.write('<h2>你好中国</h2>')
    // res.end()

    //读取index.html内容作为响应数据
    res.setHeader('Content-Type', 'text/html;charset=utf-8')
    fs.readFile('./views/index.html',(err,data) => {  
        if(err){
            console.log(err);
            res.end()
        } else {
            res.end(data)//把数据写在这里
        }
    })
    
})

server.listen(3000,'localhost',511,() => {
    console.log('服务器已经运行在http://localhost:3000');
})

添加路由

const http = require('node:http')
const fs = require('fs')

const server = http.createServer((req,res) => {
    console.log(req.url);
    res.setHeader('Content-Type', 'text/html;charset=utf-8')
  //添加路由
    //条件判断 path  = './views/index.html'
     
    // fs.readFile('./views/index.html',(err,data) => {
    // fs.readFile('./views/about.html',(err,data) => {
    fs.readFile('./views/404.html',(err,data) => {
        if(err){
            console.log(err);
            res.end()
        } else {
            res.end(data)//把数据写在这里
        }
    })
    
})

server.listen(3000,'localhost',511,() => {
    console.log('服务器已经运行在http://localhost:3000');
})

3月30日下午

熟练掌握node.js路由的原生写法

const http = require('node:http')
const fs = require('fs')

const server = http.createServer((req, res) => {
    console.log(req.url);
    res.setHeader('Content-Type', 'text/html;charset=utf-8')
    //////////////添加路由:router/////////////////
    //条件判断 path  = './views/index.html'
    let path = './views/'
    switch (req.url) {
        case '/':
            path += 'index.html'
            res.statusCode = 200
            break
        case '/about':
            path += 'about.html'
            res.statusCode = 200
            break
        case '/about-me':
            res.setHeader('Location', '/about')
            res.statusCode = 301
            break
        default:
            path += '404.html'
            res.statusCode = 404
    }
    // fs.readFile('./views/index.html',(err,data) => {
    // fs.readFile('./views/about.html',(err,data) => {
    fs.readFile(path, (err, data) => {
        if (err) {
            console.log(err);
            res.end()
        } else {
            res.end(data)//把数据写在这里
        }
    })

})

server.listen(3000, 'localhost', 511, () => {
    console.log('服务器已经运行在http://localhost:3000');
})

Npm install

语法

npm install module-name
npm install -g module-name # -g:全局安装
npm i module-name  # npm i是npm install的别名
npm install module-name --save
npm install module-name --not--save
npm install module-name --save-dev

express写路由

const express = require('express')
const app = express()

app.get('/', function (req, res) {
    // res.send('Hello World')
    res.sendFile('./views/index.html',{root:__dirname})
})
app.get('/about', function (req, res) {
    res.sendFile('./views/about.html',{root:__dirname})
})
app.get('/about-me', function (req, res) {
    res.redirect('/about')
})

//404 page
app.use((req,res) => {
    res.status(404).sendFile('./views/404.html',{root:__dirname})
})

app.listen(3000)

3月30日日考题

  1. __dirname是什么: 1.全局变量 2.当前目录名

  2. __filename是什么 1.全局变量 2.当前文件名

  3. path模块的用途是什么? 处理路径

  4. 如何把一个字符串路径转成对象?path.parse()

  5. 如何提取当前js文件的文件名?path.basename(__filename)

  6. path.join('/fold1','//folder2','../index.html') 的结果是什么?

    /folde1/index.html

  7. path.resolve('/fold1','/folder2','../hello.html')的结果是什么?

    /hello.html

  8. 写出读取同级文件data.txt内容的代码

    Data.txt

    Hello world
    

    index.js

    const fs = require('node:fs')
    fs.readFile('./data.txt')
    
  9. NPM是什么?

    Node 软件包管理器

  10. package.json文件的用途是什么?

    用于描述模块文件。

  11. 使用第三方模块一共有四步,你认为有哪四步?

    • 查找模块:登录npmjs.com 查询一个你要的第三方模块
    • 安装模块
    • 引入模块
    • 使用模块

3月29日上午笔记

全局变量

__dirname

定义

__dirname表示当前文件(模块)所在的目录名称。

  • Dir: directory 文件夹、目录
  • Name: 名字

语法

console.log(__dirname) //全局直接调用

示例

console.log(__dirname)

输出

/Users/zj/Desktop/7/0329

绝对路径 VS 相对路径

# 绝对路径
\Users\zj\Desktop\7\0329
\zj\Desktop\7\0329
\Desktop\7\0329
# 相对路径有三种
images/aaa.jpg
./images/aaa.jpg
../images/aaa.jpg

__filename

定义

__filename表示当前文件(模块)的名称。

  • file: 文件
  • Name: 名字

示例

console.log(__filename)

输出

/Users/zj/Desktop/7/0329/1-global.js

内置模块 Path

定义

node:path 是一个内置模块。它提供了处理路径的API。路径分为:

  • 文件路径
  • 文件夹路径

使用path模块,第一步做什么?

1path.basename()

定义

语法

path.basename('路径','删除的后缀名')

返回值

返回 path 的最后一部分

示例

const path = require("node:path")

console.log(__filename);
console.log(path.basename(__filename));
console.log(path.basename(__filename,'.js'));
console.log(path.basename(__dirname));

输出

/Users/zj/Desktop/7/0329/2-path.js
2-path.js
2-path
0329

2path.dirname(path)

定义

dirname()用于返回当前目录的路径。

语法

path.dirname('path')

返回值

示例

3path.extname(path)

定义

返回的是当前文件的扩展名。

语法

返回值

示例

4path.parse()

定义

parse() 方法:从路径字符串返回一个对象。

语法

path.parse('路径')

返回值

返回一个表示路径的对象。

示例

console.log(__filename);
console.log(path.parse(__filename));

输出

{
  root: '/',
  dir: '/Users/zj/Desktop/7/0329',
  base: '2-path.js',
  ext: '.js',
  name: '2-path'
}

5path.format()

定义

format()方法:从路径对象转路径字符串。

语法

path.format(路径对象)

返回值

返回路径字符串

示例

const obj = path.parse(__filename)
console.log(path.format(obj));

6path.join()

定义

join()方法用于把路径片段连接为规范路径。

简言之:连接路径片段。

语法

path.join()
path.join('路径片段1','路径片段2',...)

返回值

返回一个拼接好的规范的路径

示例

const p1 = path.join('fold1','folder2','index.html')
console.log(p1);
const p2 = path.join('/fold1','folder2','index.html')
console.log(p2);
const p3 = path.join('/fold1','//folder2','index.html')
console.log(p3);
const p4 = path.join('/fold1','//folder2','./index.html')
console.log(p4);
const p5 = path.join('/fold1','//folder2','../index.html')
console.log(p5);

输出

fold1/folder2/index.html
/fold1/folder2/index.html
/fold1/folder2/index.html
/fold1/folder2/index.html
/fold1/index.html

7path.isAbsolute()

定义

isAbsolute()方法用于检测一个路径是否是绝对路径。

语法

path.isAbsolute(path)

返回

返回布尔值 :true 或 false

示例

console.log(path.isAbsolute(__filename));//true
console.log(path.isAbsolute('./data.json')); //false

8path.resolve()

定义

resolve()方法用于解析为绝对路径。

语法

path.resolve([...paths])//路径片段

返回值

返回绝对路径字符串

示例

const p1 = path.resolve('fold1','folder2','index.html')
folder1/folder2/index.html
/Users/zj/Desktop/7/0329/
/Users/zj/Desktop/7/0329/fold1/folder2/index.html
console.log(p1);
const p2 = path.resolve('/fold1','folder2','index.html')
console.log(p2);
const p3 = path.resolve('/fold1','/folder2','index.html')
console.log(p3);
const p4 = path.resolve('/fold1','//folder2','./index.html')
console.log(p4);
const p5 = path.resolve('/fold1','/folder2','../hello.html')
console.log(p5);

FS模块(FS系统)

定义

FS 文件系统模块允许操作计算机系统上的的文件。具体操作如下:

  • 读取
  • 创建
  • 修改
  • 删除

引入FS文件系统

要使用fs文件系统,请先引入fs模块

语法:基于回调函数(默认)

const fs = require("node:fs")

fs.readFile()

定义

readFile()方法用于(异步)读取文件内容。

语法

fs.readFile('文件路径',callback)
fs.readFile('文件路径',(err,data) => {
 if(err) console.log(err)
 console.log(data)
})

返回值

返回读取成功的内容。

数据类型:buffer

示例:


fs.writeFile()

定义

writeFile() 用于异步的写入文件数据。

语法

fs.writeFile(file, data[, options], callback)

返回值

示例

npm是什么

  • NPM 是"Node Package Manager"的缩写,意思:Node软件包管理工具
  • NPM的主要内容
    • 安装软件包
    • 删除软件包
    • 分享你自己写的软件包(npmjs.com)
  • NPM是世界上最大软件包平台。
  • NPM的构成:
    • 官网(https://npmjs.com): 查询软件包
    • CLI(Command Line Interface):命令行交互工具
    • 软件注册表:JS软件包的仓库

package是什么

  • 意思:软件包
  • 一个package由1个或多个module组成。

package.json是什么

  • 用于描述你的模块文件。

  • 用于配置你的模块文件。

  • package.json描述了如何使用模块文件。

  • 一个pacakge(软件包)必须包含一个package.json文件。

  • package.json文件的创建方法:

    • 手动创建

    • 半自动:npm init命令创建

    • 自动:npm init --yes命令创建

node_modules

  • 用于存储第三方模块的文件
  • 打包项目发给别人之前,可删除node_modules文件夹,以减少文件体积。
  • 注意:package.json和package-lock.json不能删
  • 可使用 npm install 重新安装模块

module

  • 模块就是一个js文件或文件夹
  • 模块必须拥有package.json文件

第三方模块的使用方法

第一步:创建文件夹

mkdir buhaoqi-package  

第二步:创建index.js

cd buhaoqi-package
New-item index.js

第三步:安装upper-case模块

npm install upper-case

第四步:修改index.js内容

const upperCase = require('upper-case').upperCase
function hello(name){
    console.log(upperCase(`hello ${name},good good study!`));
}
hello('zhangsan')
module.exports = hello

第五步:运行index.js

node index

输出结果

HELLO ZHANGSAN,GOOD GOOD STUDY!

版本号

NPM采用的是Sementic Version Controls系统

语法

X.Y.Z

1.1.3
初始版本号一般默认:0.1.0
正式发布:1.0.0

X : Major Version 主版本号:较大变化

Y: Minor Version 副版本号:增加了一个函数

Z: patch Version Bug版本号:修复bug

3月29日日考

  1. http模块的用途是什么(创建服务器)

  2. 如何引入http模块: require("node:http")

  3. 创建服务器分为哪几步骤:

    步骤1:const http = 引入http模块

    步骤2:const server = http.createServer()

    步骤3:server.listen()

    const server = http.createServer()
    server.listen()
    
  1. 设置响应头的方法: res.writeHead()

  2. 使用Content-Type设置内容类型时的值有哪几种?(学过的)

    text/plain
    text/html
    application/json
    
  1. 写出在lib.js文件中导出模块的代码

    //lib.js
    const sum = (a,b) => {
        return a + b
    }
    const minus = (a,b) => {
        return a - b
    }
    
    module.exports = {sum,minus}
    
  2. 写出在Index.js中调用sum和minus的方法,计算5和3点和 计算5和3点差

    //方法1
    const {sum,minus}=require('./libs')
    sum(5,3)
    minus(5,3)
    //方法2
    const obj =require('./libs')
    const {sum,minus} = obj
    sum(5,3)
    minus(5,3)
    //方法3
    const obj =require('./libs')
    obj.sum(5,3)
    obj.minus(5,3)
    
  1. 模块是什么: 模块是封装在js文件中的代码块

  2. 模块系统有几种?

    CommonJS ESM = ECMAScript Module

  3. res.end()的含义是什么

    通知客户端响应结束

3月28日项目介绍

【问候】:同学们好!老师好!我是xxx。

【项目介绍】

第一部分:介绍项目名称:图库APP

第二部分:效果展示

  1. 导航效果展示:什么时候显示? 什么时候隐藏?
  2. 图片效果展示:无限加载
    1. 第一组图片默认加载20张
    2. 滚动条滑动到底,加载第二组图片
    3. 再次滑动到底,加载第三组图片

第三部分:项目技术介绍

这个项目一共用到了几种技术:

  • 导航菜单使用的boostrap框架实现的。
  • 图片数据使用的免费数据接口
  • 加载图片使用了三种技术
    • AJAX /Fetch API
    • 懒加载
    • 瀑布流(图片排列)

3月28日

日考

  1. 进入用户根目录的命令是 cd ~

  2. 进入根目录的命令是 cd /

  3. 删除文件夹的命令是 rm

  4. 创建文件夹的命令是 mkdir

  5. 查看aaa文件夹下有哪些内容的命令是

    ls aaa
    
  6. Node.js中的module是什么?

    模块指封装在js文件中的代码块。
    Node会把任何一个js文件看出一个模块。
    
  7. NodeJS中的module系统分为几种?

    - 默认模块系统:CommonJS Module
    - 标准模块系统:ECMAScript6 Module
    
  8. NodeJS中的module分为几种?

    - 本地
    - 内置
    - 第三方
    
  9. 写出在lib.js文件中导出模块的代码

    //lib.js
    const sum = (a,b) => {
        return a + b
    }
    const minus = (a,b) => {
        return a - b
    }
    
    module.exports = {sum,minus}
    
  1. 写出在Index.js中调用sum和minus的方法,计算5和3点和 计算5和3点差

    //index.js
    const obj = require('./lib')
    //const {sum,minus} = obj
    obj.sum(5,3)
    obj.minus(5,3)
    

http 内置模块

http.createServer()

定义

createServer()用于创建Node服务器。

  • 创建服务端和客户端通信的方式。
  • res对象:使用响应对象设置响应头。
    • 响应头:用于通知浏览器:
      • 状态码
      • 数据类型是什么
      • 数据
      • 其他参数
  • req对象:使用请求对象解析请求头。
    • 请求头:包含了请求的具体信息。
      • 请求方法:get post put delete
      • 请求数据
      • 请求的地址
      • 浏览器的信息
      • 等其他信息

语法

http.createServer((req,res) => {
  //1.解析请求
  
  //2.处理响应
  res.writeHead()//设置响应头
  res.end()
})

返回值

示例

res.writeHead()

定义

res.writeHead()用于设置响应头信息。

语法

返回值

示例

res.end()

定义

res.end() 用于通知客户端响应结束。结束的时候可以携带一些数据。

语法

返回值

示例

server.listen()

定义

Server.listen() 用于设置服务器的监听端口。

语法

返回值

示例

Node监听

定义

Node监听就是在不重启服务器的情况下,自动刷新页面。

语法

node --watch 文件地址

示例

node --watch './app/index.js'

Conten-Type

定义

Content-Type用于指定响应头的数据类型。

语法

{"Content-Type": 属性值}

属性值:

  • text/plain : 文本/普通文本
  • text/html : 文本/html文本
  • application/json: JSON文本

3月27日

知识点

  1. 习惯使用搜索打开APP
  2. 5个命令。每人创建一个命令笔记,专门整理命令
  3. 学会使用环境变量(全局变量)
  4. 命令行使用技巧
  5. Node.js中的module是什么?
  6. NodeJS中的module系统分为几种?
  7. NodeJS中的module分为几种?

cd命令

定义

cd命令用于改变目录。cd即:change directory

示例

# bash下面使用#注释

# 进入当前目录下的images目录
cd images
# 进入当前目录下的images目录
cd ./images
# 进入上一级目录下的aaa目录
cd ../aaa
# 进入当前硬盘的根目录
cd /
# 进入当前用户的根目录
cd ~

pwd

定义

pwd用于显示当前位置。

ls

定义

ls用于查看当前目录下的内容(文件和文件夹)

mkdir

定义

mkdir用于创建文件夹。即"make directory"

示例:

# 在当前目录下创建一个aaa的文件夹
mkdir aaa
# 在当前用户的桌面上创建一个bbb的文件夹
mkdir ~/desktop/bbb
# 在根目录下创建一个ccc的文件夹
mkdir /ccc

rm

定义

rm用于删除指定的目录或文件。rm是"remove"的缩写

参数

-r 递归删除

-f 强制删除 f: force: 强制、暴力、武力

示例

文件目录分两种:空目录 和 非空目录

- users
    - projectA (删除projectA)
        - index.html
        - css
            - style.css

命令行使用技巧

  1. 打开命令行:
    • 全局打开:搜索框 => 输入power
    • 定位文件夹打开:按住shift + 右键点空白
  2. 快速补全:输入一个字母+tab键可以补充全名
  3. 快速查询上一条录入:使用上方向键

Node是什么

Node.js是一个基于V8引擎运行环境。

- v8引擎:JS的渲染器

Node.js是一个服务器平台。

Node.js底层使用C++编写的。

Node.js是安装在操作系统上的一个程序,这个程序的工作的时候是跟操作系统在对话。(交互)

Node执行js的方式

在Node.js中,运行js代码的方式有两种

  • 直接运行js文件:node app.js
  • 使用REPL模式运行js代码
    • R:Read读取js代码
    • E: Execute执行JS代码
    • P:Print打印js代码
    • L: Loop 循环js代码

NodeJS VS 浏览器

Node和浏览器都是运行js的环境

Node.js 浏览器
语法相同 支持ECMAScript 支持ECMAScript
API不同 Global、module、buffer、domain等 BOM、DOM
老大不同 Global window
交互对象 在node.js运行js,是和操作系统对话 在浏览器中运行js,,是和浏览器对话

module API是什么

  • module是一个内置的全局对象。

  • module用于表示模块。

  • 模块:模块就是封装在一个js文件中的代码块。(在Node的模块系统中,每一个js文件都是一个模块)

    const sum = (a,b) => {
      return a + b
    }
    const minus = (a,b) => {
      return a - b
    }
    

module对象

> module
Module {
  id: '<repl>',
  path: '.',
  exports: {},
  filename: null,
  loaded: false,
  children: [],
  paths: [
    '/Users/zj/Desktop/7/0327/repl/node_modules',
    '/Users/zj/Desktop/7/0327/node_modules',
    '/Users/zj/Desktop/7/node_modules',
    '/Users/zj/Desktop/node_modules',
    '/Users/zj/node_modules',
    '/Users/node_modules',
    '/node_modules',
    '/Users/zj/.node_modules',
    '/Users/zj/.node_libraries',
    '/usr/local/lib/node'
  ]
}

NodeJS中的module系统分为几种?

模块系统的背景

  • JS缺点1:没有模块

  • JS缺点2:存在命名冲突(set map 模块)

    <head>
      <script src='./jquery.js'></script>
      <script scr='./tquery.js'></script>
      <script scr='./script.js'></script>
    </head>
    
  • CommonJS : 面向服务器 通过Require()

  • RequireJS: 基于CommonJS的一个包装。

  • AMD: Asynchrouns Module D? :面向浏览器

Node.js的模块系统分为两种

  • CommonJS: Node.js的默认模块系统。采用第三方的模块系统。
  • ECMAScript: 是Node.js的标准模块系统。(向原生语言看齐)

NodeJS中的module分为几种?

  • 本地模块:在项目中,由开发者创建的模块。
  • 内置模块:由Node.js提供的预设模块。
    • 内置模块是全局模块。
    • 内置模块是Node.js的核心模块。
  • 第三方模块: 在项目中,由其他开发者创建的模块。

NPM是什么

  • NPM: Node Package Manager Node软件包管理器
  • NPM就是Node.js平台的商店。

CommonJS模块系统

module对象

定义

  • module对象表示一个模块。
  • 一个JS文件就是一个模块。
  • 模块是封装在js文件中代码块,拥有独立的作用域。
  • module对象是一个全局对象。

module.prototype.require()

定义

require()方法用于加载外部模块。

  • require()是node的一个内置函数。
  • require()在工作的时候,它用于包裹(读取+执行)模块文件中的代码块。

语法

module.require(id)
require(id) //module是全局对象,可省略

Id: 表示加载的模块的文件名

返回值

返回从模块文件中导出的模块

示例

module.exports

定义

module.exports 用于暴露/导出/分享模块。(暴露作用域)

  • module.exports是一个对象。
  • Module.exports 用于包裹要导出的模块。

语法

//语法1:导出单个变量(变量名、函数名、类名)
const sum = (a,b) => {
    return a + b
}
module.exports = sum //单个变量名

//语法2:导出单个直接量
module.exports = (a,b) => {
    return a + b
}

//语法3:导出多个变量
const sum = (a,b) => {
    return a + b
}
const minus = (a,b) => {
    return a - b
}
module.exports = {
    // sum:sum,
    // minus: minus
    sum,
    minus
}

//语法4:导出多个变量
module.exports.sum = (a,b) => {
    return a + b
}
module.exports.minus = (a,b) => {
    return a - b
}

//语法5:导出多个变量
module.exports = {
    sum : (a,b) => {
        return a + b
    },
    minus : (a,b) => {
        return a - b
    }
}
//语法6:导出多个变量
const obj = {
    sum : (a,b) => {
        return a + b
    },
    minus : (a,b) => {
        return a - b
    }
}
module.exports = obj

APP1.js

const math = module.require('./lib1')
// const {sum,minus} = math
console.log(math.sum(3,3));
console.log(math.minus(3,3));

// console.log(sumFn(3,3))
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,657评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,662评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,143评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,732评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,837评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,036评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,126评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,868评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,315评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,641评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,773评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,859评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,584评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,676评论 2 351

推荐阅读更多精彩内容