欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

什么是Node.js

程序员文章站 2022-05-03 22:50:31
什么是node.js node简介 node的javascript解析器就是v8引擎 在node中没有dom和bom的概念, 由以下三部分组成: 1. ecmascript 2...

什么是node.js

node简介

node的javascript解析器就是v8引擎

在node中没有dom和bom的概念, 由以下三部分组成:

	1. ecmascript
	2. 全局成员
	3. 核心模块api

学习目标: 使用node平台搭建一个后台服务器, 进行后端开发

repl环境: read eval print loop 同控制台

es6语法介绍

let关键字

定义变量

因为var关键字存在一些问题:

没有块级作用域

 for (var i = 0; i < 10; i++) {

 }

 console.log(i) // 10

变量声明提升

 console.log(a); // undefined
 var a;

如果使用let关键字则不存在以上两个问题:

	for (let i = 0; i < 10; i++) {

	}

	console.log(i) // 报错: i is not defined


	console.log(a); // 报错: a is not defined
	let a;

总结: 使用let关键字声明变量的特点主要就是有块级作用域, 并且必须先声明再使用, 否则会报错, 没有变量声明提升的概念

const关键字

定义常量

const a = 10;  // 从此以后a不能被重新赋值

a + 1; // 没有对a赋值 所以不会报错

a += 1; // 报错: assignment to constant variable

const b; // 报错: missing initializer in const declaration

总结:

定义常量时必须要给初始值 定义完常量后无法对常量进行重新赋值

let和const都必须要先声明再使用, 并且都不可以重复声明

解构赋值

解构赋值一般用于将对象中的属性值获取出来, 存在变量中使用

let user = {
	name: '刘希晗',
	age: 18,
	gender: '男'
}

// 开发中如果需要将对象的属性值提取出来在变量中使用: 
let uname = user.name;

// es6新语法, 将对象中属性批量提取到变量中:
let { name:username, age } = user;
console.log(username);
console.log(age);

箭头函数

es6中提出的一种新型匿名函数的语法:

也可以理解为一种语法糖

let 函数名 = (形参1, 形参2) => {
	// 函数体
}

特点: 指向外部函数的this, 语法较为简单

注意: 绑定事件时千万不要使用箭头函数, 因为使用function绑定事件处理函数, 内部的this指向事件源, 如果使用箭头函数绑定, 则不会指向事件源

箭头函数的几种变体:

函数只有一个形参, 那么左侧的()可以省略

 let fn1 = (a) => {
 	return a + 1;
 }

 let fn2 = a => {
 	return a + 1;
 }

函数体中只有一行代码, 那么右侧的{}可以省略并且省略return, 默认会返回右侧代码执行的结果

 let fn1 = (a, b) => {
 	return a + b;
 }

 let fn2 = (a, b) => a + b

结合以上两点, 如果只有一个形参, 并且函数体中只有一行代码, 那么两侧的(){}都可以省略

 let fn1 = (a) => {
 	return a + 1;
 }

 let fn2 = a => a + 1

注意事项: 只有一个形参的情况下可以省略左侧的(), 其他情况有多个参数或者没有参数都必须加上()

声明对象属性的简洁语法

以前创建对象属性的字面量:

var name = '刘希晗';
var age = 18;
var weight = 80;

var user = {
	name: name,
	age: age,
	weight: weight,
	eat: function(food) {
		console.log('吃了十斤' + food);
	}
}

es6新语法:

let name = '刘希晗';
let age = 18;
let weight = 80;
let gender = '女';

let user = {
	name,
	age,
	weight,
	gender,
	eat(food) {
		console.log('吃了十斤' + food);
	},
	sleep() {
		console.log('上课睡觉真舒服');
	}
}

内置模块

fs

fs模块: file system 文件, node提供用于操作文件或目录的api都在该模块中

读取文件

 readfile()

 参数1: 要读取的文件路径, 如果是相对路径表示相对于当前执行node命令的路径, 而非相对当前文件, 如果需要相对当前文件路径, 请使用: __dirname进行拼接

 参数2: 编码, 一般情况都需要指定编码, 默认值为null

 参数3: 回调函数, 读取完文件后会执行, 有两个参数, 第一个参数为err, 第二个参数是读取的数据data

写入文件, 会覆盖文件

 writefile()

 参数1: 要读取的文件路径, 如果是相对路径表示相对于当前执行node命令的路径, 而非相对当前文件, 如果需要相对当前文件路径, 请使用: __dirname进行拼接

 参数2: 要写的数据内容

 可选参数3: 编码, 默认为utf8, 一般就使用默认的

 参数4: 回调函数, 写入完文件后会执行, 有一个参数err写入失败时会有数据, 如果err为null表示写入成功

追加文件, 在文件末尾继续追加

 appendfile()

 参数1: 要读取的文件路径, 如果是相对路径表示相对于当前执行node命令的路径, 而非相对当前文件, 如果需要相对当前文件路径, 请使用: __dirname进行拼接

 参数2: 要写的数据内容

 可选参数3: 编码, 默认为utf8, 一般就使用默认的

 参数4: 回调函数, 写入完文件后会执行, 有一个参数err写入失败时会有数据, 如果err为null表示写入成功

写入文件和追加文件都有共同的特点, 如果要写入的目录下文件不存在, 会自动创建文件并写入/追加

全局成员: __dirname, 获取当前文件所在的绝对路径

因为在node中使用相对路径都是相对于当前执行node指令的目录, 所以才会有__dirname和__filename的存在