Ⅰ- 壹 - nodejs
一 什么是Nodejs Nodejs是使用了Javascript这门语言来开发。
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。
Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。
Node.js 的包管理器 npm,当你安装Node的时候就自动安装了npm,是全球最大的开源库生态系统,简单的说 Node.js 就是运行在服务端的 JavaScript。
Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台。
Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎,V8引擎执行Javascript的速度非常快,性能非常好。
Node.js中 DOM和BOM不存在所以事件不存在,使用req.on绑定事件
二 使用Node之前的准备 先安装nvm,下载node会自动有npm命令,然后下载yarn(以后下载尽量使用yarn)
1 NVM node版本管理器和nrm镜像管理
项目中可能遇到两个项目node版本不一样,nvm可以安装多个版本node,不同版本随意切换,切记
安装完NVM之后在进行Nodejs的安装从官网上下载node 安装包
进行安装,官网下载地址:http://nodejs.cn/download/ 按装之后会自动安装npm
NVM下载地址:https://github.com/coreybutler/nvm-windows/releases
解决 nvm 下载慢的问题 (选择性使用cnpm,正常不会有问题)
在程序安装目录下找到 settings.txt,添加下面两行。
- node_mirror: https://npm.taobao.org/mirrors/node/
- npm_mirror: https://npm.taobao.org/mirrors/npm/
编号 | NVm命令 | 简介 |
---|---|---|
1 | nvm version或nvm -v | 查看nvm版本 |
2 | nvm install 10.6.2或者nvm i XXXX | 安装node10.6.2版本(附带安装npm) |
3 | nvm uninstall 10.6.2 | 卸载node10.6.2版本 |
4 | nvm list | 查看node版本 |
5 | nvm use 10.6.2 | 将node版本切换到10.6.2版本 |
6 | nvm root | 查看nvm安装路径 |
7 | nvm install latest | 下载最新的node版本和与之对应的npm版本 |
yarn global add nrm
编号 | nrm命令 | 简介 |
---|---|---|
1 | nrm ls | 查看所有的镜像 |
2 | nrm add name url | 添加自定义的npm源,name 为自定义源名称 ,url为npm源链接 |
3 | nrm use name | 切换npm镜像 name 为自定义源名称 |
npm的海量模块,使得我们开发复杂的NodeJs的程序变得更为简单。www.npmjs.com
(1) npm常用命令
编号 | npm命令 | 简介 |
---|---|---|
1 | npm install XXXX | 安装Node包(XXXX包名称)标注a |
2 | npm uninstall XXXX | 卸载Node包(XXXX包名称)–save-dev(本地项目卸载)/-g(全局包卸载) |
3 | npm config get prefix | 查看全局安装路径 |
4 | npm init | 初始化目录生成package.json配置文件 |
5 | npm cache clean | 删除安装包缓存 |
6 | npm update XXXX | 更新安装包 |
7 | npm ls | 查看本地安装包 |
8 | npm root | 查看当前包安装路径 npm root -g 查看全局包安装路径 |
9 | npm run XXX | 运行某一个命令 |
10 | npm install | 安装package.json 中的所有文件 |
标注a
npm install (1)npm install XXXX-g 为全局安装(2)npm install XXXX@5.1.1 安装特定版本插件
(3)npm install XXXX–save 会在package.json的dependencies属性下添加XXXX即发布依赖时候任依赖的插件
- –save是对生产环境所需依赖的声明(开发应用中使用的框架,库),会压缩到线上
- –save-dev是对开发环境所需依赖的声明(构建工具,测试工具).正常使用npm install时,会下载dependencies和devDependencies中的模块,不会压缩到线上仅仅作为开发时候使用例如 jQuery
npm install
的时候巨慢。特别是新的项目拉下来要等半天,删除node_modules,重新install的时候依旧如此。- 同一个项目,安装的时候无法保持一致性。由于package.json文件中版本号的特点,下面三个版本号在安装的时候代表不同的含义。
npm i yarn -g
(4) Yarn常用命令 和npm类似
编号 | yarn命令 | 简介 |
---|---|---|
1 | yarn add XXXX | 安装Node包(XXXX包名称)标注a |
2 | yarn remove XXXX | 卸载Node包(XXXX包名称)yarn global remove X(删除全局) |
3 | yarn install或 yarn | 安装package.json 中的所有文件 |
4 | yarn update XXXX | 更新安装包 不填写则安装全部 |
5 | yarn list | 列出当前项目的依赖 |
6 | yarn config list | 显示当前配置 |
7 | yarn init | 初始化目录生成package.json配置文件 |
8 | yarn run XXX | 运行某一个命令可简写yarn XXXX |
标注a
yarn install (1)yarn global add XXXX 为全局安装(2)yarn add XXXX @5.1.1 安装特定版本插件
(3)yarn add XXXX–save yarn默认会在package.json的dependencies属性下添加XXXX即发布依赖时候任依赖的插件
(4)yarn add XXXX–dev 会在package.json的devDependencies属性下添加XXXX依赖 即开发依赖插件 yarn 简写 -D
b yarn修改全局安装路径和环境配置 解决使用yarn安装的插件不可用的情况
在终端中
#1.改变npm 全局安装位置
npm config set prefix "你的磁盘路径"
#这里是我的路径
npm config set prefix "D:\appCache\nodejs\node_global"
#2. 改变 npm 缓存位置
npm config set cache "你的磁盘路径"
#这里是我的路径
npm config set cache "D:\appCache\nodejs\node_cache"
然后配置一下系统环境变量
将
D:\appCache\nodejs\node_global
和 D:\appCache\nodejs\node_global\node_modules
这两个添加到你的系统环境变量中。我们需要将
D:\appCache\yarn\global\node_modules\.bin
整个目录 添加到系统环境变量中去,否则通过yarn 添加的全局包 在cmd 中是找不到的。检查当前yarn 的 bin的 位置
yarn global bin
检查当前 yarn 的 全局安装位置
yarn global dir
3 nodemon实时监听器
用来监视node.js应用程序中的任何更改并自动重启服务,非常适合用在开发环境中。
终端输入
npm install -g nodemon
安装完 nodemon 后,就可以用 nodemon 来代替 node 来启动应用:
nodemon [node.js文件](相当于 node [node.js文件])
(1) nodemon报错解决
文章图片
在使用的时候可能会遇到这种情况nodemon无法使用的情况,首先是否全局安装
npm install nodemon -g
如果还是不可以那就是没有配置环境变量以步骤
a 解决方法1
- 首先在终端输入命令
npm config get prefix
查看npm安装路径,
- 复制路径打开我的电脑找到该路径下=>node_modules=>可以看到所有的安装模块找到nodemon找到bin然后复制路径
- 在系统环境变量的path中添加刚刚复制的路径
我的电脑右击属性=>高级系统设置=>环境变量=>系统变量中找到path把刚刚复制的路径新建添加
- 重启vscode
- 搜索找到powerShell以管理员的身份打开
- 输入set-ExecutionPolicy RemoteSigned
- 选择 A 或者 Y,然后重启
node.js模块主要分为三类:内置模块、第三方模块、自定义模块。
一 第三方模块 在 npmjs.com官网上,我们可以下载别人已经封装好的模块到自己的项目中使用,这些模块都是第三方模块
例如 jquer 安装的时候会根据后缀安装 -g全局安装会安装在本地 不填写默认安装在本项目的node_modules(没有的话会自动创建)文件目录下
二 自定义模块
自定义模块取自网络
我们可以从官网上下载别人写好的模块直接使用,也可以按照自己的项目需要,封装模块,发布到官网上,让别人来下载使用。
这里说一下npm包发布的流程:
- 注册npmjs官网账号,官网地址:https://www.npmjs.com/;
- 创建你要发布的项目,创建完成后,在终端执行
npm init -y
, 生成Package.json 文件,填写包的名称、版本号、入口文件等,要保证包的名称在官网上是唯一的; - 执行发布,终端输入
npm login
回车,输入账号,密码,登录npmjs官网;然后输npm publish
,就可以将包发布到官网了; - 查看,打开npmjs网站 ,进入个人中心–>packages,就可以看到发布的包;
- 更新,修改完代码内容后,改变package.json里面版本号,再执行
npm publish
,就可以更新发布了,在官网上可以看到自己发布过的版本; - 使用方式,终端中使用
npm i 包名称
安装包,然后在文件中使用require(包名称)
,将包导入自己的项目中,就可以使用了; - 撤销已经发布的包版本,终端中输入
npm unpublish 包名称@版本号
;
内置模块名称 | 简介 |
---|---|
url | 用于处理与解析 URL |
querystring | 用于解析和格式化 URL 查询字符串; |
http | HTTP服务; |
path | 路径,用于处理文件路径和目录路径; |
fs | 文件系统,用于文件的读写操作; |
events | 事件触发器,用于事件的派发与监听; |
- hostname,获取及设置 URL 的主机名部分,它和host的区别是,它不包含端口。
- pathname,获取及设置 URL 的路径部分,也就是端口号后面的所有内容。
- port,获取及设置 URL 的端口部分。http协议的默认端口号是80,https协议的默认端口号是443。ftp协议的默认端口号是21。
- search,获取及设置 URL 的序列化查询部分。也就是 ?号后面的所有内容,包含?号。
(2) querystring
-
querystring.parse()
将 URL 查询字符串 str 解析为键值对的集合。
-
querystring.stringify()
将传入的对象拼接成字符串。
-
http.createServer
:创建server对象
-
http.get
:执行http get请求
-
http.request()
:一般用来发送POST请求。
path.basename
:返回一个路径的最后一部分path.dirname
:返回一个路径的目录名path.extname
:返回一个路径的扩展名path.join
:用于拼接给定的路径片段path.normalize
:将一个路径正常化
Ⅳ - 肆 - Node的使用 一 ES6和Nodejs导出文件和导入文件 在Nodejs中导出带有./为自定义模块 内置的不需要添加路径
//es6的模块导出
export default class Box{}//node的模块导出
module.exports=obj;
//默认导出一个对象exports.o=o;
exports.o1=o1;
exports.abc=abc;
// node导出多个对象 */
//es6中导入模块
import Box from "./js/a.js";
//node中导入模块
var obj=require("./js/a");
obj.a();
obj.b();
二 创建一个Node服务 (1) 统配
const http = require('http')
var app = http.createServer((request, response) => {
request.method;
//判断是GET请求还是POST请求
request.url;
//路径端口号后面的内容
request.header;
//请求头内容
request.on("data",()=>{});
//收到客户端发来的数据
request.on("end",()=>{//数据接收完毕
response.setHeader();
//设置响应头内容
response.write(str);
//发送数据给客户端
response.end();
//响应完毕
});
})
app.listen(3000, () => { //开启服务
console.log('localtion start 3000')
})
(2) 前后通信 在html中的请求数据的接口要对应请求的服务器接口,因为是本地服务器所以域名为当前计算机的域名
index.js
//载入http内置模块
var http = require("http");
//内置模块 将 URL 查询字符串 str 解析为键值对的集合。
var querystring = require("querystring");
var server = http.createServer(function (req, res) {
// req 请求对象
// res 响应对象var datahttps://www.it610.com/article/= "";
//收到客户端发过来的数据
req.on("data", function (_data) {
data += _data;
});
//数据接收完毕
req.on("end", function () {
//对数据的处理判断数据去除空格后长度
if (data.trim().length === 0) data = https://www.it610.com/article/req.url.split("?")[1];
else {
try {
//把数据转换为数组
data = https://www.it610.com/article/JSON.parse(data);
} catch (error) {}
}
if (typeof data ==="string") {
try {
//将 URL 查询字符串 str 解析为键值对的集合。
data = https://www.it610.com/article/querystring.parse(data);
} catch (error) {
res.end("错误的消息");
return;
}
}
//
if (!data) {
res.end("错误的消息");
return;
}
//200 为响应码
res.writeHead(200, {
//解决乱码问题
"content-type": "text/html;
charset=utf-8",
//允许跨域请求 *代表通配符
"Access-Control-Allow-Origin": "*"
//cors跨域
});
res.write((data.user ? data.user : "你没有user") + "欢迎光临");
//发送数据给客户端
res.end();
//响应完毕
})
});
//监听服务器访问设置端口号4006
//listen 参数有三个分别是端口号 IP地址 回调函数
server.listen(4006, "10.9.65.202", function () {
console.log("创建服务成功")
});
index.html
Document - 锐客网
//或者使用Ajax 请求数据
<-- >
var obj={
user:"xietian",
age:30,
sex:"男"
}var xhr=new XMLHttpRequest();
//XMLHTTPRequest
xhr.addEventListener("load",loadHandler);
xhr.open("GET","http://10.9.65.239:4006?user=xietian");
xhr.send();
function loadHandler(e){
console.log(xhr.response);
}-->
0 - 0 - 知识点: 一 全局变量
__dirname
:当前文件的目录【Nodejs使用前准备,基本使用、常用命令】
__filename
:当前文件的绝对路径推荐阅读
- Node.js时间戳和日期互相转换
- nodejs|package.json.lock 文件
- websocket|android中如何使用websocket,以及用nodejs做后台的实例
- javascript|使用vue实现自己音乐播放器仿网易云 移动端 (audio、播放、暂停、上一首、下一首、展示评论、音量控制、进度条拖拽)
- javascript|TODO-4(nodejs 实现一部漫画爬取)
- Node.js中相同模块是否会被加载多次()
- NodeJS使用lodash去重排序
- nodejs(五)node引入核心模块fs
- nodejs|windows 10系统nodejs安装ffi模块