2019-04-16

2019-04-16  本文已影响0人  随性个性随机

node(一)

标签(空格分隔): 前端笔记


const path = require('path');
const fs = require('fs');

//记住,今后只要涉及到路径片段的拼接,一定要使用path.join()方法
// __dirname 是运行js文件的那个目录文件夹
fs.readFile(path.join(__dirname,'./22.txt'),'utf-8',(err,data) => {
    if (err){
        console.log(err);
    } else {
        console.log(data);
    }
})

结论:今后在调用 fs 模块,操作文件的时候,如果要提供路径,一定不要使用相对路径。

js代码什么情况下必须加分号
如果一行代码,是以{ [ + - / 这5个符号中的任何一个开头,则应该在行首,添加一个分号

;[1,2,3].forEach(item=> {
    console.log(item);
})
fs.readFile(__dirname + '/files/1.txt','utf-8',(err,data)=> {
    if (err) {
        return console.log("读取文件失败"+err.message);
    }else {
        console.log(data);
    }
})

const fs = require('fs');
fs.writeFile('./files/2.txt','abcdd',(err)=> {
    if(err){
        console.log("写入文件失败!"+err.message);
    }else{
        console.log('写路文件成功!');
    }
})

const fs = require('fs');
fs,appendFile('./files/2.txt','4444',(err) => {
    if(err){
        return console.log('追加失败!'+err.message);
    }else{
        console.log('ok!');
    }
})

1、整个node.js课程学习目标

  1. 【基础概念】
  1. 【基本能力】
  1. 【高阶能容】

注意:整个node.js学习阶段,概念类知识点较多,需要理解透彻!
总结:node.js整个课程阶段,最主要的学习目标,是为了能够使用node.js,结合JavaScript实现后端编程。


2、了解基本概念

2.1 语言和环境(平台)之间的关系

  1. 语言,是编写代码的语法规范;程序员遵循特定的语法规范,编写出来的代码,只是单纯的文本字符串而已,并不具备可执行的特点。

  2. 环境(平台),提供了执行代码的能力,如果程序员编写的代码想要成功执行,必须要特定的执行环境

2.2 前端和后端

  1. 后端主要工作
  1. 前后端写作开发

  2. 前端主要工作

2.3 浏览器环境中的Javascript

  1. 诞生:上世纪90年代左右,网景liveScript、表单验证
  2. 一战:
  1. 二战:
  1. 回顾:浏览器中JavaScript的组成部分

2.4 NOde环境中的JavaScript

  1. 什么是node.js:就是JavaScript的服务器端运行环境,可以让程序员使用JavaScript来实现服务端的编程
  2. node.js中的JavaScript的组成部分
  1. 注意:node.js中没有BOM、DOM

2.5 ECMAScript规范,浏览器中的Js,node中的js之间的关系

  1. ECMAScript规范(标准):就是一本书,这本书中规定了语言的特性
  2. 浏览器中的js:
  1. node中的js

2.7 总结

  1. 什么是node.js(我们自己给它下个定义)

就是一个服务器端的JavaScript运行环境,可以让程序员,通过JavaScript做后台服务器编程开发。

  1. 学习node.js可以做什么

3、环境安装

3.1 LTS和Current版本的区别

  1. LTS:【推荐在企业中使用】,是长期稳定版的安装包,运行稳定、安全
  2. Current:【推荐学习或尝鲜去使用】,是最新特征版,这个安装包中有最新的node特性。

3.2 下载安装

官网:[node.js官网][1]
查看是否安装成功:

cmd ---- > node -v

3.3 查看node版本号

  1. 打开终端,在命令行输入命令node -v即可
  2. Tips:如何进入终端呢?

3.4 path环境变量

  1. 什么是环境path环境变量
  1. 系统环境变量和用户环境变量的区别
  1. 通过终端输入命令的形式,快速启动应用程序时,路径的查找规则

4、node.js环境中执行js代码的两种方式

4.1 node 命令(推荐)

  1. 直接使用node要执行的js文件的路径来执行指定的的JS文件

小技巧:
1. 在终端中,使用的键盘的上键,可以快速定位到上一次执行的命令
2. 在终端中,使用键盘的tab键能够快速补全路径
3. windows系统上,在终端中输入cls可以清屏
4. 可以使用exit命令退出当前终端

创建一个js文件:
在文件的目录中打开终端:
node ./11.js

4.2 REPL环境-了解

  1. 如何进入REPL环境,打开任意终端,直接输入node并回车,就会进入到REPL环境中
  2. 如何离开REPL环境,按两次 ctrl + c 就能退出REPL环境
  3. REPL中,每个字母代表什么意思呢:

5、ECMAScript 6常用的语法

5.1 let(变量)与const(常量)

  1. 之前定义变量,用var关键字,有如下主要特点:
  1. let主要特征
  1. const主要特征
console.log(a); //-->不报错,输出undefind
var a = 10;

// let也是用来定义变量的
console.log(a); //--> 报错,变量没有声明
let a = 10;、
/*------------------------*/
for(var i = 0;i < 3;i++ ){ }
console.log(i); //--> 输出为3 3,循环之后输出为3,var没有块级作用域

for(let i = 0;i<3;i++){ }
console.log(i); //--> 报错,let声明的变量具有块级作用域,只有在for循环中才可以访问到,在外部访问报错
/*------------------------*/
for(let i = 0;i<3;i++){ 
    // 由于 { }会对let产生作用域,所以每次循环,都创建了独立的 {} 的作用域,和上一次的循环,作用域各自独立
    console.log(i); //--> 输出为:1、2、3 每个for循环都是一个块级作用域,循环三次,创建三个块级作用域
}
/*------------------------*/
var a = 10 ;
var a = 20 ;
console.log(a); //--> 输出为20,var 可以重复声明一个变量
{
    let a = 10;
    let a = 20;
    console.log(a); //--> 报错,在同一作用域中,let定义的变量,无法被重新定义
}
var a = 30;
console.log(a); //--> 在不同作用域中,可以使用let定义相同的变量名
/*------------------------*/
const a;
console.log(a) //--> 报错,定义const常量时候,必须定义且赋值

5.2 变量的结构赋值(常用)

定义:所谓的结构赋值,就是把某个对象中的属性,当作变量,给解放出来,这样,今后就能够当作变量直接使用了。

//变量的结构赋值
const obj = {
    a: 10,
    name: 'zs'
}
//可以直接通过 = 为常量对象中的属性赋值,但是无法使用 = 为常量重新赋值
obj.a = 20;

console.log(obj);
/*--------------------------*/
const person = {
    name: 'zs',
    age: 22,
    gender: '男',
    address: '成都'
}
//传统做法
const name = person.name;
console.log(name);
const address = persobn.address;
console.log(address);
//结构赋值
const { name:username,address:address } = person //把对象的name属性和address属性的值取出来
console.log(name);
console.log(address);

5.3 箭头函数

  1. 语法
function show() {
    console.log('这是普通 function 定义的 show 方法');
}
(形参列表) => {函数体代码}
  1. 箭头函数,本质上就是一个匿名

  2. 箭头函数的特性:箭头函数内部的this,永远和箭头函数外部的this保持一致

  3. 变体

  1. 注意:如果我们省略了右侧函数体的 {} ,那么,默认会把右侧函数体中代码的执行结果,当作箭头函数的调用结果return 出去。
const show = (name)=> {
    console.log('my name is'+ name);
}
show('zs');

//箭头函数的自调用
;(()=> {
    console.log('my name is'+ name);
})();

//变体1(省略() )
const show = name=> {
    console.log('my name is'+ name);
}
//变体2 (省略 {})
const show = (name)=> console.log('my name is'+ name);
//变体3 (省略 ()和 {})
const show = name => console.log('my name is'+ name);



5.4 对象中定义方法和定义属性的便捷方式

const name = 'zs';
const age = 22;
const gender = '女';
const say = function(){
    console.log('say');
}

const person = {
    name,
    age,
    gender,
    say,
    show(){
        console.log(this);
    }
}

6、文件操作

6.1 文件读取

/*
* 使用 require 方法,导入fs模块
* fs模块的作用,就是来操作文件的
*/
const fs = require('fs');

/*
* 接收三个参数
* 参数1:【必选参数】字符串的文件路径,表示要读取哪个文件
* 参数2:【可选参数】字符串类型的编码格式,默认为null
* 参数3:【必选参数】回调函数
*       有两个参数 err 错误的结果  data 读取到的内容
*/
fs.readFile('./files/1.txt',(err,data)=> {
    // 如果读取成功,则 err 为 null,data 是成功之后的数据
    // 如果读取失败,则err 为一个错误对象,data 为undefined
    // err 是Error类型的一个对象,data 是一个二进制的数据,不过在展示的时候,为了方便展示,操作系统帮我们把二进制的 Buffer 转换为了十六进制的格式
    console.log(err); //--> null
    console.log(data); //--> <Buffer 61 62 63>
    /*---------------------------------*/
    
    console.log(data.toString()); 
});
/*---------------------------------*/
//提供了编码格式自动转换为二进制,没有提供编码格式则直接显示二进制
fs.readFile('./files/1.txt','utf-8',(err,data)=> {
     console.log(data); 
})
/*-----------------------------------------使用此方法*/
fs.readFile('./files/1.txt','utf-8',(err,data)=> {
    if (err) {
        return console.log("读取文件失败"+err.message);
    }else {
        console.log(data);
    }
})

6.2 文件写入

const fs = require('fs');
/*
*参数1:要把文件写路到哪个路径中
*参数2:要写入的内容
*参数3:字符集编码格式
*参数4:回调函数,只有一个参数err
* 如果文件存在,则会覆盖文件
*/
fs.writeFile('./files/2.txt','abcdd',(err)=> {
    if(err){
        console.log("写入文件失败!"+err.message);
    }else{
        console.log('写路文件成功!');
    }
})

6.3 文件追加

const fs = require('fs');

/*
*参数1:要追加的文件
*参数2:追加的内容
*参数3:字符集编码,默认为utf-8
*参数4:回调函数,参数为err
* 如果追加的文件不存在,就会创建这个文件
*/

fs,appendFile('./files/2.txt','4444',(err) => {
    if(err){
        return console.log('追加失败!'+err.message);
    }else{
        console.log('ok!');
    }
})

6.4 fs模块中路径操作问题(难点)

console.log(__dirname); //--> 打印出文件所在的目录 C:\Users\19254\Desktop\node
console.log(__filename); //--> 打印出文件所在的路径以及文件名称 C:\Users\19254\Desktop\node\11-fs.js

/*-------------------------------*/


6.5 读取文件信息

const fs = require('fs');

//读取文件信息
const fs = require('fs');
fs.stat(__dirname+'/22.txt','utf-8',(err,stats) => {
    if (err){
        console.log("读取文件失败!" + err.message);
    } else {
        //读取文件大小,单位是子节 byte(不能获取目录的大小)
        console.log(stats.size);
        //读取文件的创建时间
        console.log(stats.birthtime);
        //判断是否是一个文件
        console.log(stats.isFile());
        //判断是否是一个目录
        console.log(stats.isDirectory());
    }
})

6.6 读取指定目录中所有文件的名称

/*
* 第一个参数要复制的文件路径
* 第二个参数要存放的文件路径
* 第三个参数回调函数,参数是错误对象
* */
fs.copyFile(__dirname+'/22.txt',__dirname+'/22-copy.txt',(err) =>{
    if (err){
        console.log("复制文件失败!"+err.message);
    } else {
        console.log("复制成功!");
    }
});

7、路径操作

const path = require('path');

/*
* 提供平台特定的路径片段分隔符
* windows 上是 '\'
* posix 上是 '/'
* */
console.log(path.sep); //--> \
const path = require('path');
const pathStr = "c:/a/b/c/1.html";
//返回最后文件名字以及后缀名
console.log(path.basename(pathStr)); //--> 1.html
//传第二个参数,就是文件的后缀名,输出的话就会忽略文件的后缀名
console.log(path.basename(pathStr,'.html')); // --> 1
const path = require('path');
//创建一个文件路径
const pathStr = "c:/a/b/c/1.html";
//获取文件所在的目录
console.log(path.dirname(pathStr));// -->c:/a/b/c
const path = require('path');
//创建一个文件路径
const pathStr = "c:/a/b/c/1.html";
//获取文件的扩展名
console.log(path.extname(pathStr)); // --> .html
const path = require('path');
const result = path.join('c:/','a/b','/c','/d','../11.js');
console.log(result); // --> c:\a\b\c\11.js
上一篇下一篇

猜你喜欢

热点阅读