Node

227 阅读5分钟

一、了解与安装

总所周知,node有助于明白后端开发,大前端必备技能有助于更好地学习前端框架。基于Chrome的V8JS引擎构建的JS运行环境,node.js不是新语言,也不是一个框架或者库,而是一个软件,JS的运行环境,用来运行JS的。从而打破了JS过去只能在浏览器中运行的局面,前后端编程环境不一,大大降低了前后端语言切换的代价。 node.js可以实现web服务器、命令行工具、网络爬虫、桌面应用程序开发(electron)、app、嵌入式、游戏等等

官网:nodejs.org/en/ 中文官网:nodejs.org/zh-cn/

安装后,打开cmd命令行窗口,输入node验证是否安装成功。

二、node执行JS的两种方式

1.交互模式(repl模式)

进入命令行窗口,输入node,即进入交互模式。在这个交互模式下可以输入js代码直接回车操作。

2.解释js文件

例如:书写一个hello.js文件 console.log('hello');

在命令行窗口 node hello.js回车,利用node来解释js代码(所以说node是js代码的解释器,或者运行环境)

三、NVM的安装和初步使用

首先要注意nodejs有很多版本,并不是新的版本一出现,旧的版本我们就不用了。在不同项目的开发过程中,可能需要我们在电脑中同时存在多个不同版本的node。因此就需要安装一个软件(NVM)来更好地管理这些不同版本的node存在我们的电脑中。

NVM=node.js version manager,nodejs版本管理器

1.安装NVM

下载链接:github.com/coreybutler…

如果电脑之前安装过nodejs,要先卸载在安装。

先卸载: 控制面板===>程序与功能===>找到nodejs这一项,右键卸载。 同时要手动打开c盘的program files目录看看nodejs文件夹是否删除了,否则还需要手动删除掉。

安装NVM: 双击nvm-setup.exe文件,开始安装===>指定nvm安装目录,保持默认目录不变===>指定nodejs安装目录,保持默认目录不变===>一直下一步,指导安装成功

检测NVM是否安装成功: 成功安装后,新开一个cmd窗口,输入nvm -v如果看到usage等信息就说明安装成功了。

image.png

配置NVM: 复制下面两句话到nvm的安装目录(C:\Users\XXXX\AppData\Roaming\nvm))下的setting.txt的最后(目的是加快后面下载nodejs的速度): node_mirror: npm.taobao.org/mirrors/nod… npm_mirror: npm.taobao.org/mirrors/npm…

2.NVM命令

nvm version:查看nvm的版本

nvm list:查看当前安装的nodejs所有版本(常用)

nvm install 版本号【架构】:安装指定版本的nodejs(常用)

nvm uninstall 版本号:卸载指定版本的nodejs

nvm use 版本号:选择指定版本的nodejs(常用)

例如:

安装指定版本:nvm install 10.15.0

安装最新版本:nvm install latest

使用安装的这个版本10.15.0:nvm use 10.15.0

查看node版本:node -v

四、node的注意事项

1.nodejs:ECMAScript+核心api.没有DOM、BOM

var oDom = document.getElementById('odiv');

console.log(oDom);

var url = location.href;

console.log(url);

以上代码会报错!

image.png

2.

nodejs提供很多模块,如:文件操作系统(file system),还提供了web服务的功能(http),即使用nodejs可以编写一个web服务器。

五、node对ES6的支持情况

ES6(ECMAScript6 ECMAScript2015)语法特性如果是在nodejs的高版本执行没啥问题,高版本支持ES6。如果是nodejs低版本,如node的5版本及以下都不支持ES6。

ES5除了可以在nodejs也可以在浏览器执行。

注意:浏览器高版本才可以执行,如果是IE 678肯定不认识,会直接报错。

六、nodejs常用内置模块

一般项目中模块分为三种:nodejs内置模块、自己写的模块、第三方模块(使用一个专门的工具npm进行统一管理)

常用的内置模块如下:

fs:文件操作

http:网络操作

path:路径操作

querystring:查询参数解析

url:url解析

const fs = require("fs");

const http = require("http");

const path = require("path");

const querystring = require("querystring");

const url = require("url");

nodejs内置模块的文档网站:nodejs.cn/api/

七、path内置模块

const path = require("path");

console.log(__dirname);//当前执行的文件绝对路径,不包含文件名

//路径的拼接join

//join默认相对路径的拼接,以当前操作系统路径分割符进行拼接

let fullPath1 = path.join('join.js');

// fullPath1 = path.join(__dirname,'join.js');//带目录

// fullPath1 = path.join(___dirname,'a','join.js');//带多级目录

console.log(fullpath1);

八、fs文件系统模块

nodejs的API内置有两个模块:path和fs,使用js代码编写程序运行在nodejs环境中就可以操作文件。

同步读取文件信息

同步读取:读取的时候,要等文件读取完毕后,才会执行后面的代码(sync同步)

const fs = require("fs");

const path = require("path");

let pathName = path.join(__dirname,'hello.txt');

//const content = fs.readFileSync(pathName);//同步读取文件

//console.log(content);

//console.log(content.toString());

const content = fs.readFileSync(pathName,"utf-8");

console.log(content);

九、http模块

这一模块首先需要了解清除IP地址、端口号、http请求的大致过程。

1.http核心模块的使用

四个步骤:

1.导入http模块

2.定义服务器程序端口

3.创建服务器对象

4.调用服务器的监听方法,让服务器监听浏览器请求

//1.导入http模块
const http = require("http");

//2.定义服务器程序端口
const PORT = 8080;//端口号:1-65535(有些服务已经有一些默认端口apache nginx:80 web服务。MySQL:3306  MongoDB:27017
//注意:一个端口只能被一个服务进行使用,如果这个端口被某个服务使用,其他服务不能使用该端口,这个时候出现端口冲突,怎么办??换个端口呀
//建议:1-1024端口(有些系统服务会使用这个范围的端口),不建议自行使用。一般使用1024以后的端口

//3.创建服务器对象
const server = http.createServer((request,response)=>{
response.write("hello nodejs");//书写响应体内容
response.end();//发生响应到浏览器,当修改代码后,需要重新执行该文件,重启服务。
});

//4.调用服务器的监听方法,让服务器监听浏览器请求
server.listen(PORT,(error)=>{
console.log(error);
console.log(`server is running at port ${PORT}`);
});

//如果报错address already in use :::8080则表示 端口被占用,换个端口即可。

//如果需要解决中文乱码,需要遵循http协议
response.setHeader("Content-type","text/html;charset=utf-8");

2.书写一个web服务器

一个可以按照请求路径返回对应文件的服务器:

const http = require("http");

const fs = require("fs");

const path = require("path");

const PORT = 8080;

const server = http.createServer((request,response)=>{
let requestUrl = request.url;
console.log(requestUrl);
if(requestUrl==='/'||requestUrl==='index.html'){
let content = fs.readFileSync(path.join(__dirname,'assets','html','index.html'));
response.end(content)
}
else if(requestUrl === '/list.html'){
let content = fs.readFileSync(path.join(__dirname,'assets','html','list.html'));
response.end(content)
}
else{
response.end('404 not found :找不到该页面')
}
});

server.listen(PORT,(error)=>{
console.log(error);
console.log(`server is running at port ${PORT}`);
});