Node.js第一天

275 阅读5分钟
1.浏览器中的JavaScript由几部分组成?
 ECMAScript (JS的语法)    WebAPI (浏览器内置的API) 
2.运行环境指的是代码正常运行所需的必要条件
必须有内置API (才能写代码)       必须有解析引擎(才能运行代码)
3.如何确认电脑是否已经安装了Node环境 ?
 打开终端,输入 `node -v`,如果能看到版本号则说明当前电脑已经安装Node环境
 注意:-v之间不能有空格
 

image.png

4.vscode中的终端总结
1.第一次打开终端,建议:鼠标在文件上右键,选择“在集成终端中打开”
2.可以使用快捷键 Ctrl + ~ 切换终端
3.运行终端里面的代码只需在终端里面输入 node  01 然后按键盘上的tab键,然后按Enter键
4.使用 ↑ 键,可以快速定位到上一次执行的命令
5.使用 tab 键,能够快速补全路径
6.使用 esc 键,能够快速清空当前已输入的命令
7.输入 cls 命令,可以清空终端

image.png

5.使用node命令存在的问题

 常见问题一:网速慢,下载速度慢

image.png

常见问题二:vscode中执行 “node xxx.js” 报错如下

image.png

 常用问题三:vscode中执行 “nodemon xxx.js”报错如下

image.png

6.文件导入导出

a 文件,通过 module.exports = 导出的内容 导出内容
b 文件,通过 require('./a'); 导入内容
注意,注意,注意,导入模块时必须带路径,即便两个JS文件在同一个目录,也要加 “./”
代码示例

image.png

image.png

7.截取字符串

image.png

image.png

8.模块化案例定义一个函数,首字母大写,其它小写

image.png

9.模块化

什么是模块化

模块化,就是把一个大的文件拆分成若干小文件,而且还能把小文件通过特定的语法组合到一起的实现过程。
比如手机、电脑....等等几乎所有,都是模块化的设计,拿电脑来说,
可以把电脑拆分成显示器、键盘、硬盘、内存等一个一个的小模块,当然也能够组装到一起。

优点

模块化的优势:
    更利于维护(比如电脑屏幕坏了,只换屏幕就可以了;比如想升级显卡,只换显卡就行了);
    更好的复用性(比如有一块移动硬盘或U盘,大家都能用)
    Node中,规定每个JS文件都是一个小模块。一个项目由许许多多的小模块(JS文件)组合而成。
Node中模块化的优势:
    更利于维护(比如,项目需要对登录模块升级,则不会影响其他模块)
    更好的复用性(比如有一个公共的函数,封装起来。其他所有JS文件都能使用这个函数)

模块的分类

 自定义模块:用户自己创建的每个JS文件,都是自定义模块
 内置模块(核心模块):Node安装后,即可使用的模块,Node环境自带。
 第三方模块:其他人或公司、组织开发的模块,发布到 npm 网站,我们需要下载使用的模块

加载模块的语法

加载自定义模块
 a 文件,必须通过 module.exports 共享(导出、暴露)当前模块中的变量
 b 文件,需要通过 require() 加载(导入)。(a 文件导出什么,b 文件就得到什么)
 加载自定义模块时,必须要带路径 (相对路径、绝对路径都可以;但必须带路径,哪怕是 ./ 也不能省略)
 加载自定义模块时,可以省略后缀
加载内置模块
直接使用 require() 加载即可。
加载模块时,无需带路径,比如 require('fs')
加载内置模块,得到对象类型,对象中内置了很多API方法
自定义模块示例

image.png

内置模块--fs模块

注意,加载内置模块,不能写路径,这是和加载自定义模块不一样的

image.png

调用fs模块的方法,下面列举fs模块中的常用方法

image.png

readFile读取文件

 //1.导入文件模块
    const fs = require('fs')
//2.读取文件
 第一个参数:文件路径
 第二个参数:编码格式 (可选参数,默认为buffer二进制)
 第三个参数:读取回调操作(异步操作)
* err:如果读取成功,err为null,  否则读取失败(一般文件路径错误或者找不到文件)
* data:读取到的数据

fs.readFile('./data/aaa.txt','utf-8',(err,data)=>{
   if(err){
        console.log(err)
    //抛出异常,throw的作用就是让node程序终止运行,方便调试
    throw err
}else{
    console.log(data)
}
})
 console.log('11111')

//3.同步读取文件(了解即可,几乎不用,一般在异步的api后面加上Sync就是同步)
 let data = fs.readFileSync('./data/aaa.txt','utf-8')
 console.log(data)
 
readFile -- 异步读取文件
 fs.readFile('./test.json', (err, data) => {
   if (err) {
      return console.log('读取文件出错');
    }
   console.log(data); // 读取到的二进制数据
  });
writeFile -- 异步写入文件
 fs.writeFile('./abc.html', 'hello world', (err) => {
     if (err) {
           return console.log('写入文件失败');
        } 
        console.log('文件写入成功');
     });
fs.writeFile() 方法的作用是:写入文件
 写入:向文件中添加内容
 特点:如果文件不存在,则会创建文件(但不能递归创建)
 特点:如果文件中有内容,将会被覆盖
 注意,这是一个异步方法

image.png

image.png

path模块 - path.extname()

 path.extname() 方法的作用是:获取路径中的后缀
 

image.png

image.png

path模块 - path.join()

path.join() 方法的作用是:拼接给出的路径
参数:两个或更多个路径
额外补充:Node中,有一个全局变量 __dirname ,它表示当前 JS 文件所在的绝对路径

image.png

// 导入fs模块
const fs = require('fs');
// 总结: 相对路径,相对的是执行文件所在的位置,不是文件本身存在的位置!
// 解决: 相对路径不安全,所以使用绝对路径!
let url = './1.txt/2.txt';
// 绝对路径1 - 路径太长,而且代码不能移植;
// url = 'E:/workspace/06-武汉校区/078期/08_node(6天)/node_01/04.code/1.txt/2.txt';
// 绝对路径2 - 利用path模块和__dirname共同拼接绝对路径;
// console.log(__dirname); // 当前文件所在的绝对路径;
//导入模块
const path = require("path");
// 绝对路径的固定写法!
 url = path.join(__dirname, './1.txt/2.txt');

// 读取文件
 fs.readFile(url, 'utf8', (err, data) => {
 // 判断是否读取失败
 if (err) return console.log(err.message);
  // 读取成功,直接输出
  console.log(data);
});

image.png