一、了解与安装
总所周知,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
如果电脑之前安装过nodejs,要先卸载在安装。
先卸载: 控制面板===>程序与功能===>找到nodejs这一项,右键卸载。 同时要手动打开c盘的program files目录看看nodejs文件夹是否删除了,否则还需要手动删除掉。
安装NVM: 双击nvm-setup.exe文件,开始安装===>指定nvm安装目录,保持默认目录不变===>指定nodejs安装目录,保持默认目录不变===>一直下一步,指导安装成功
检测NVM是否安装成功: 成功安装后,新开一个cmd窗口,输入nvm -v如果看到usage等信息就说明安装成功了。
配置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);
以上代码会报错!
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}`);
});