54 Node.js快速入门
技术交流QQ群:1027579432,欢迎你的加入!
欢迎关注我的微信公众号:CurryCoder的程序人生
1.Node开发概述
1.1 为什么要学习服务器端开发基础
- 能够与后端程序员更加紧密的配合;
- 网站业务逻辑前置,学习前端技术需要后端技术支撑(Ajax)
- 扩展知识视野,能够站在更高的角度审视整个项目
1.2 服务器端开发要做哪些事
- 实现网站的业务逻辑
- 数据的增删改查
1.3 为什么选择Node
- 使用JavaScript语法开发后端应用
- 一些公司要求前端工程师掌握Node开发
- 生态系统活跃,有大量开源库可以使用
- 前端开发工具大多基于Node开发
1.4 Node是什么
- Node是基于Chrome V8引擎的JavaScript代码运行环境。
- 运行环境
- 浏览器(软件)能够运行JavaScript代码,浏览器就是JavaScript代码的运行环境。
- Node(软件)能够运行JavaScript代码,Node就是JavaScript代码的运行环境。
2.Node运行环境搭建[本文中Node版本为v10.15.1]
- Node官网:https://nodejs.org/en/
- Node版本说明
- LTS = Long Term Support长期支持版 稳定版
- Current 拥有最新特性 实验版
// 查看Node版本 C:\Users\Administrator>node -v v10.15.1
- Node环境安装失败解决方法
- 错误代码2502、2503。失败原因:系统账户权限不足;解决方法:首先以管理员身份运行cmd,接着输入运行安装包命令msiexec/package node安装包位置。
- 执行命令node -v报错。失败原因:node安装包路径没有添加到系统环境变量PATH中。
- 系统环境变量PATH:存储系统中的目录,在命令行中执行命令时,系统会自动去这些目录中查找命令的位置。
3.Node.js快速入门
3.1 Node.js的组成
- JavaScript由三部分组成:ECMAScript、DOM、BOM。
- Node.js是由ECMAScript和Node环境提供的一些附加API组成的,包括文件、路径、网络等等一些更强大的API。
3.2 Node.js基础语法
- 所有ECMAScript语法在Node环境中都可以使用。
var first = 'hello nodejs'; console.log(first);const fn = () => console.log('fn函数被调用了'); fn();for (var i = 0; i < 3; i++){console.log(i); }if (true) {console.log('123'); }
- 在cmd(cls清屏快捷键)中运行代码,如下所示:
E:\前端开发\JavaScript\练习代码\Node.js>node 01_helloworld.js hello nodejs fn函数被调用了 0 1 2 123
3.3 Nods.js中的全局对象global
- 在浏览器中全局对象是window,在Node中全局对象是global。
- Node中全局对象有以下方法,可以在任何地方使用,global可以省略。
- console.log():在控制台中输出
- setTimeout():设置超时定时器
- clearTimeOut():清除超时定时器
- setInterval():设置间歇定时器
- clearInterval():清除间歇定时器
// global.console.log('我是global对象下面的console.log()方法输出的内容');// global.setTimeout(() => {// console.log('123'); // }, 2000);console.log('我是global对象下面的console.log()方法输出的内容');setTimeout(() => {console.log('123'); }, 2000);
4.Node.js模块化开发
4.1 JavaScript开发弊端
- JavaScript在使用时存在两大问题:文件依赖和命名冲突。
4.2 软件中的模块化开发
- 一个功能就是一个模块,多个模块可以组成完整应用,抽离一个模块不会影响其他功能的运行。
4.3 Node.js中模块化开发规范
- Node.js规定:一个JavaScript文件就是一个模块。模块内部定义的变量和函数,默认情况下在外部无法得到。
- 模块内部可以使用exports对象进行成员导出,使用require方法导入其他模块。
// a.js// 在模块a内部定义变量 let version = 666; // 在模块内部定义方法 const sayHi = name => `Hi, ${name}`; // 利用exports对象向模块外部导出数据 exports.version = version; exports.sayHi = sayHi;// b.js// 在b.js模块中导入模块a // let a = require('./02_a.js') let a = require('./02_a'); // 注意:导入模块时,模块的后缀是可以省略的。 // 输出b模块中的version变量 console.log(a.version);// 调用b模块中的sayHi方法,并输出其返回值 console.log(a.sayHi('CurryCoder'));
- 注意:导入模块时,模块的后缀是可以省略的。
4.4 模块成员导出的另一种方式
- 模块成员导出语法如下:
module.exports.version = version; module.exports.sayHi = sayHi;
- 具体使用,如下例所示:
// module.exports.a.js模块let greeting = name => `Hello, ${name}`;// 利用module.exports对象导出成员 module.exports.greeting = greeting;// module.exports.b.js模块 const a = require('./03_module.exports.a.js');console.log(a.greeting('CurryCoder'));
- exports对象与module.exports对象对比:exports对象是module.exports对象的别名(地址引用关系),导出对象最终以module.exports为准。
4.5 模块导出的两种方式联系与区别
// module.exports.a.js模块let greeting = name => `Hello, ${name}`;
const x = 100;
// 两种模块导出方式的联系
exports.x = x;
// 利用module.exports对象导出成员
module.exports.greeting = greeting;// module.exports.b.js模块
const a = require('./03_module.exports.a.js');
// console.log(a.greeting('CurryCoder'));
console.log(a);// 结果
E:\前端开发\JavaScript\练习代码\Node.js>node 03_module.exports.b.js
{ x: 100, greeting: [Function: greeting] }
// module.exports.a.js模块let greeting = name => `Hello, ${name}`;
const x = 100;exports.x = x;
module.exports.greeting = greeting;
// 两种模块导出方式的区别
// 当exports对象和module.exports对象指向的不是同一个对象时,以module.exports为准!!!
module.exports = {name: '大拿'
}exports = {age: 20
}// module.exports.b.js模块
const a = require('./03_module.exports.a.js');// console.log(a.greeting('CurryCoder'));
console.log(a);// 结果
E:\前端开发\JavaScript\练习代码\Node.js>node 03_module.exports.b.js
{ name: '大拿' }
5.系统模块
5.1 什么是系统模块
- Node运行环境提供的API。因为这些API都是以模块化的方式进行开发的。所以,我们又称Node运行环境提供的API为系统模块。
5.2 系统模块fs 文件操作
- f:file文件,s:system系统,文件操作系统。
- 注意:读取文件是硬盘的操作,它需要耗时。因此,需要通过callback回调函数的方式获取文件读取的结果。
const fs = require('fs');// 读取文件内容 fs.readFile('文件路径/文件名称'[,'文件编码'], callback); // callback是回调函数,
- 读取文件语法示例:
// 导入系统模块fs const fs = require('fs');// 2.通过fs模块内部的readFile读取文件内容 fs.readFile('./01_helloworld.js', 'utf-8', (err, doc) => {// 如果文件读取错误,err是一个对象,它包含错误信息// 如果文件读取正确,err是null// doc是文件读取的结果console.log(err);console.log(doc); });
- 写入文件内容语法格式:
fs.write('文件路径/文件名', '数据', callback);
- 写入文件语法示例:
const fs = require('fs');fs.writeFile('./demo.txt', '即将要写入的内容', err => {if (err != null) {console.log(err);return;}console.log('文件内容写入成功~'); });
5.3 系统模块path 路径操作
- 为什么需要路径拼接?答案:不同操作系统的路径分隔符不统一;[Windows系统上分隔符是\或/,Linux系统上分隔符是/]
- 路径拼接语法
path.join('路径','路径',...)
- 路径拼接示例
// public/uploads/avatar // 导入系统模块path const path = require('path');const filePath = path.join('public', 'uploads', 'avatar'); console.log(filePath);
5.4 相对路径 VS 绝对路径
- 大多数情况下,使用绝对路径。因为相对路径有时候相对的是命令行工具的当前工作目录。
- 在读取文件或设置文件路径时,都会选择绝对路径。
- 使用_dirname获取当前文件所在的绝对路径。
const path = require('path'); const fs = require('fs');console.log(__dirname); // 获取当前文件所在的绝对路径,即E:\前端开发\JavaScript\练习代码\Node.js console.log(path.join(__dirname, '01_helloworld.js'));fs.readFile(path.join(__dirname, '01_helloworld.js'), 'utf-8', (err, doc) => {console.log(err);console.log(doc); });
6.第三方模块
6.1 什么是第三方模块
- 别人已经写好的、具有特定功能的,我们能直接使用的模块即第三方模块。由于第三方模块通常是由多个文件组成并且被放置在一个文件夹中,所以又称为包。
6.2 第三方模块有两种存在形式
- 第一种:以js文件的形式存在,提供实现项目具体功能的API接口。
- 第二种:以命令行工具的形式存在,辅助项目开发。
6.3 获取第三方模块
- npmjs.com:第三方模块的存储和分发仓库。
- npm(node package manager):node的第三方模块管理工具。
- 下载第三方模块:在命令行中输入 npm install 模块名称,例如:npm install formidable
- 注意:下载下来的第三方模块位于当前命令行的路径中,npm为我们自动创建了一个package-lock.json文件和node_modules文件夹(第三方模块在当中)。
- 卸载第三方模块:在命令行中输入 npm uninstall 模块名称,例如:npm uninstall formidable
- 本地安装与全局安装
- 本地安装:将第三方模块下载到当前的项目当中,供当前的项目使用。如:库文件
- 全局安装:将第三方模块下载到一个公共的目录当中,所有的项目都可以使用这个模块。如:命令行工具
7.第三方模块nodemon
- nodemon是一个命令行工具,用于辅助项目开发。
- 在Node.js中,每次修改文件都要在命令行工具中重新执行该文件,非常繁琐。
- 使用步骤:
- (1).使用npm install nodemon -g下载它,-g参数表示全局安装。
- (2).在命令行工具中使用nodemon命令替代node命令执行文件。
8.第三方模块nrm
- nrm(npm registry manager): npm下载地址切换工具
- npm默认的下载地址在国外,在国内下载速度慢。
- 使用步骤:
- (1).使用npm install nrm -g 下载它
- (2).查询可用下载地址列表 nrm ls
- (3).切换npm下载地址:nrm use 下载地址名称
9.资料下载
- 笔记及代码,欢迎 star,follow,fork…
54 Node.js快速入门相关推荐
- Node.js快速入门
一.简介 1.什么是Node.js 简单的说 Node.js 就是运行在服务端的 JavaScript. Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎, ...
- 万字长文--详解Node.js(快速入门)
Node.js基础与扩展 Node.js 1.初识Node.js与内置模块 1.1 Node.js初识 1.2 fs文件系统模块 1.3 path路径模块 1.4 http模块 2.模块化 2.1 模 ...
- node.js快速入门指南
Node.js迅速蹿红,衍生了一个强大的开源社区.支持企业,甚至还拥有属于自己的技术大会.我把这种成功归结于它的简介,高校,同时提高了编程生产力. Node.js 的前置知识很多,例如以下知识 Jav ...
- Node.js快速入门之基础模块及常用api
目录 Node特点 模块化 文件 文件读取 文件写入 文件删除 Buffer(缓存数据) 读取/删除目录 输入输出 文件流 写入流 读取流 先流入后流出的整个流程 管道流 Node事件 Os模块和pa ...
- 最新Node.JS入门视频教程20集 Node.JS快速入门编程教材 Node.JS视频(偏重基础)
本套NodeJS教程共20集,同时包含源码.教程内容有点偏重基础,非常适合零基础的朋友学习! 下载地址:百度网盘
- Node.js核心入门(二)
目录: Node.js核心入门(一) 全局对象 常用工具 事件机制 Node.js核心入门(二) 文件系统访问 HTTP服务器与客户端 文件系统 fs fs 模块是文件操作的封装,它提供了文件的读取. ...
- Node.js:入门资料
<快速搭建 Node.js 开发环境以及加速 npm> http://fengmk2.com/blog/2014/03/node-env-and-faster-npm.html <N ...
- node爬虫快速入门
node爬虫 初入前端,刚刚接触node,对于耳闻已久的node爬虫非常神往,所以有了这篇文章,项目代码在文章末尾 需求 抓取天涯论坛重庆地区板块的文章列表信息. 使用工具 node.js super ...
- Node.js开发入门—语音合成示例
出于项目需要,搞了一个语音合成(TTS)的小示例,使用的是OKVoice. 我想在PC上测试,OKVoice的快速接入API可以实现我的目的,文档在这里:http://dev.okvoice.com/ ...
最新文章
- Linux 信号随笔
- 5个让你充满健身动力的方法
- android handler作用,3.2.4 Handler的作用
- mysql查询补丁更新_OS:服务器系统补丁及数据库补丁更新说明
- 具有InlfuxDB的Spring Boot和Micrometer第3部分:Servlet和JDBC
- 黑苹果uhd630黑屏_求助各位图吧大佬一个黑苹果问题(黑苹果吧发帖得四级),目前使...
- CF(437C)The Child and Toy(馋)
- 做web前端的小伙伴注意了,未来这些发展方向可以试试!
- Nand_ECC_校验和纠错_详解
- 深度学习(十八)基于R-CNN的物体检测-CVPR 2014
- android 多次点击事件,Android按钮onclick事件在多次单击后激发
- 论文引介 | Information Extraction with Reinforcement Learning
- C++中begin、end、front、back函数的用法
- nginx启用reuseport
- html群聊插件,团队群聊.html
- 深度学习中常用的损失函数
- 读我(Readme)
- AE使用中的常见错误01
- Ubuntu16.04下RealSense D435i的安装和使用
- 内存管理(二) ARC
热门文章
- 如何确定软件测试结束的标准
- 从外卖小哥到月入两万的城市经理,他在无锡见证外卖大战
- Eclipse保存文件时出现字符编码错误
- 关于wxpy,使用Python玩转微信的问题
- MySQL数据库启动报The server quit without updating PID file
- Acronis Disk Director 10 硬盘操作详细教程(三)分区表修复
- ActiveMQ常见问题
- 年薪50万,副职级别!注册安全工程师的前途如此光明?
- JavaMoney规范(JSR 354)与对应实现解读
- 开会迟到,代码不规范,晚上八点半去健身,跟leader坐电梯自己先出去!某新入行程序员被疯狂吐槽!...