一、Node.js简介
Node.js是一种运行在服务器端,能够使JavaScript语言具备服务端编程能力的平台。Node.js是基于Chrome V8 JavaScript引擎(JavaScript程序可以运行在浏览器中或是服务器中)构建的,所以具有很强的性能优势。Node.js的出现给Web开发带来了很多便利,其最熟悉的就是能够编写高并发的服务器端代码。
Node.js由Ryan Dahl于2009年推出,继承了浏览器端JavaScript的模块化思想,并在其基础上发展出了更多服务端开发的特性,例如操作文件系统、网络编程等。Node.js拥有强大的第三方模块生态,可用于Web开发、即时通讯、云计算平台等领域。
二、基础语法
1.变量声明
JavaScript的基础语法可以说是最容易掌握,而其中变量声明更是入门必会。Node.js与JavaScript的基础语法基本相同,引入一个变量,需要声明后方可使用。
var a = 10;
let b = 20;
const c = 30;
其中,var是ES5中的语法标准,而let、const则是ES6中新增的语法标准。var关键字定义的变量的作用域是函数作用域,在函数内部定义的变量在函数外部无法访问。而let定义的变量在花括号内有作用域的限制,使得变量在函数内部声明,函数外部未定义该变量。
2.函数声明
在JavaScript中,函数是一等公民,也就是说,它可以被赋值到一个变量里,以及作为参数传递给另一个函数。
function sum(a, b) {
return a + b;
}
const result = sum(1, 2);
console.log(result)
函数还可以使用箭头函数的语法,如下:
const sum = (a, b) => { return a + b }
箭头函数的语法比传统的函数定义方式更加简洁,但不支持函数名称绑定,不能作为构造函数使用。
3.条件分支语句
在Node.js中,条件分支语句与JavaScript中的用法相同,主要有if...else、switch...case等语句进行判断。
const a = 10;
if (a >= 10) {
console.log('a的值大于等于10');
} else {
console.log('a的值小于10');
}
switch (a) {
case 10:
console.log('a等于10');
break;
case 20:
console.log('a等于20');
break;
default:
console.log('a的值不是10也不是20');
}
4.循环语句
Node.js中的循环语句包括for循环、while循环、do...while循环,都与JavaScript的语法相同。
三、核心模块
1.模块系统
Node.js的最大特点之一是模块系统,使得Node.js具有强大的扩展能力。在Node.js中,每个JavaScript文件都是一个模块,文件内的变量、函数都默认是私有的,不会影响到全局对象。要想将内部的模块暴露出来供其他文件使用,需要通过module.exports来实现。
//module1.js
function sum(a, b) {
return a + b;
}
module.exports = sum;
//module2.js
const sum = require('./module1');
const result = sum(1, 2);
console.log(result);
通过require()方法来引用模块,同一个文件夹内的模块文件可省略路径,否则需输入完整路径。
2.文件系统模块
文件系统模块fs是Node.js中非常常用的模块,提供了对文件进行读写和操作的能力。
在读取文件时,可使用fs.readFile()方法读取文件的内容。
const fs = require('fs');
fs.readFile('./file.txt', 'utf8', (err, data) => {
if (err) throw err;
console.log(data);
});
当要写入文件时,可使用fs.writeFile()方法写入文件内容:
fs.writeFile('./file.txt', 'Hello World', (err) => {
if (err) throw err;
console.log('文件已写入');
});
3.网络模块
在Node.js中,网络编程不再像传统的Java、C++编程一样需要花费大量的时间去编写繁琐的网络代码。Node.js自带的核心网络模块可以帮助我们更快速地搭建服务器,实现基础的网络通信。
其中最常用的是http模块,可用于创建基本的http服务器或客户端请求。
const http = require('http');
const server = http.createServer((req, res) => {
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.write('Hello World!');
res.end();
});
server.listen(3000, () => {
console.log('服务器已启动');
});
4.事件模块
Node.js中的事件(EventEmitter)模块是一个非常重要的模块,因为许多Node.js中的模块都是基于它工作的。
通过引入事件模块,可以实现在某些特定事件发生时调用回调函数,类似于浏览器端的事件监听。
const EventEmitter = require('events');
//自定义一个事件继承自EventEmitter
class CustomEmitter extends EventEmitter {}
const emitter = new CustomEmitter();
emitter.on('customEvent', (arg1, arg2) => {
console.log('事件触发', arg1, arg2, this);
});
emitter.emit('customEvent', '参数1', '参数2');
四、总结
本文简要介绍了Node.js的基础语法、核心模块等内容。相信在学习完本文后,用户可以更加深入地了解Node.js的基础知识,并对应用场景有进一步的了解。