Node.js快速入门

简介: Node.js快速入门

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版本
C:\Users\Administrator>node -v
v10.15.1


  • LTS = Long Term Support长期支持版 稳定版
  • Current 拥有最新特性 实验版

51.png

                                             Node版本说明.png

  • 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。50.png

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可以省略。


// global.console.log('我是global对象下面的console.log()方法输出的内容');
// global.setTimeout(() => {
//     console.log('123');
// }, 2000);
console.log('我是global对象下面的console.log()方法输出的内容');
setTimeout(() => {
    console.log('123');
}, 2000);


  • console.log():在控制台中输出
  • setTimeout():设置超时定时器
  • clearTimeOut():清除超时定时器
  • setInterval():设置间歇定时器
  • clearInterval():清除间歇定时器


4.Node.js模块化开发


4.1 JavaScript开发弊端


  • JavaScript在使用时存在两大问题:文件依赖命名冲突48.png

                   49.png 


4.2 软件中的模块化开发


  • 一个功能就是一个模块,多个模块可以组成完整应用,抽离一个模块不会影响其他功能的运行。47.png



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'));


46.png

模块的导入与导出.png

  • 注意:导入模块时,模块的后缀是可以省略的


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 模块导出的两种方式联系与区别

45.png

联系.png

// 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] }


44.png

                                                区别.png

// 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为系统模块

43.png


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默认的下载地址在国外,在国内下载速度慢。

42.png

  • 使用步骤


  • (1).使用npm install nrm -g 下载它
  • (2).查询可用下载地址列表 nrm ls
  • (3).切换npm下载地址:nrm use 下载地址名称


9.相关资料


相关文章
|
6月前
|
存储 监控 JavaScript
Node.js 性能平台5分钟快速入门
首先,确保拥有阿里云账号并开通服务,以及一台可上网的服务器。然后,创建应用并记下App ID和App Secret。通过tnvm安装Node.js性能平台组件,包括alinode和agenthub,检查安装成功的方法是`which node`和`which agenthub`命令显示路径包含`.tnvm`。接着,启动agenthub,并在服务器上运行一个示例应用(demo.js),该应用模拟计算密集型任务。最后,通过阿里云控制台观察监控数据和执行诊断操作。注意,性能平台每分钟上传一次日志,可能需等待几分钟才能看到数据。详细部署指南可参考官方文档。
84 6
|
2月前
|
JavaScript
Nodejs的cnpm包管理器快速入门
介绍Node.js的cnpm包管理器,包括cnpm的实现原理、如何安装cnpm、使用cnpm安装软件包,以及Node.js搜索包的流程。
106 2
Nodejs的cnpm包管理器快速入门
|
2月前
|
存储 JavaScript
Nodejs的npm包管理器快速入门
介绍Node.js的npm包管理器的快速入门,包括包的概念、结构、描述文件、npm常用命令如安装、搜索、移除软件包,以及如何处理常见的npm工具部署错误。
68 2
Nodejs的npm包管理器快速入门
|
5月前
|
JavaScript 前端开发 安全
【JavaScript 】DOM操作快速入门
【JavaScript 】DOM操作快速入门
73 2
|
5月前
|
JavaScript 前端开发 Java
JavaScript快速入门
JavaScript快速入门
30 1
|
4月前
|
SQL 前端开发 JavaScript
JavaScript快速入门 有这一篇就够!
JavaScript快速入门 有这一篇就够!
|
4月前
|
存储 JavaScript 前端开发
如何快速入门使用Vue.js
如何快速入门使用Vue.js
41 0
|
5月前
|
Web App开发 存储 JavaScript
JavaScript快速入门
JavaScript快速入门
28 0
|
6月前
|
JavaScript 前端开发 Java
JavaScript 快速入门手册
JavaScript 快速入门手册
|
6月前
|
JavaScript 前端开发 Java
JavaScript 快速入门手册
JavaScript 快速入门手册
39 0
下一篇
无影云桌面