技术交流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快速入门相关推荐

  1. Node.js快速入门

    一.简介 1.什么是Node.js 简单的说 Node.js 就是运行在服务端的 JavaScript. Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎, ...

  2. 万字长文--详解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 模 ...

  3. node.js快速入门指南

    Node.js迅速蹿红,衍生了一个强大的开源社区.支持企业,甚至还拥有属于自己的技术大会.我把这种成功归结于它的简介,高校,同时提高了编程生产力. Node.js 的前置知识很多,例如以下知识 Jav ...

  4. Node.js快速入门之基础模块及常用api

    目录 Node特点 模块化 文件 文件读取 文件写入 文件删除 Buffer(缓存数据) 读取/删除目录 输入输出 文件流 写入流 读取流 先流入后流出的整个流程 管道流 Node事件 Os模块和pa ...

  5. 最新Node.JS入门视频教程20集 Node.JS快速入门编程教材 Node.JS视频(偏重基础)

    本套NodeJS教程共20集,同时包含源码.教程内容有点偏重基础,非常适合零基础的朋友学习! 下载地址:百度网盘

  6. Node.js核心入门(二)

    目录: Node.js核心入门(一) 全局对象 常用工具 事件机制 Node.js核心入门(二) 文件系统访问 HTTP服务器与客户端 文件系统 fs fs 模块是文件操作的封装,它提供了文件的读取. ...

  7. Node.js:入门资料

    <快速搭建 Node.js 开发环境以及加速 npm> http://fengmk2.com/blog/2014/03/node-env-and-faster-npm.html <N ...

  8. node爬虫快速入门

    node爬虫 初入前端,刚刚接触node,对于耳闻已久的node爬虫非常神往,所以有了这篇文章,项目代码在文章末尾 需求 抓取天涯论坛重庆地区板块的文章列表信息. 使用工具 node.js super ...

  9. Node.js开发入门—语音合成示例

    出于项目需要,搞了一个语音合成(TTS)的小示例,使用的是OKVoice. 我想在PC上测试,OKVoice的快速接入API可以实现我的目的,文档在这里:http://dev.okvoice.com/ ...

最新文章

  1. Linux 信号随笔
  2. 5个让你充满健身动力的方法
  3. android handler作用,3.2.4 Handler的作用
  4. mysql查询补丁更新_OS:服务器系统补丁及数据库补丁更新说明
  5. 具有InlfuxDB的Spring Boot和Micrometer第3部分:Servlet和JDBC
  6. 黑苹果uhd630黑屏_求助各位图吧大佬一个黑苹果问题(黑苹果吧发帖得四级),目前使...
  7. CF(437C)The Child and Toy(馋)
  8. 做web前端的小伙伴注意了,未来这些发展方向可以试试!
  9. Nand_ECC_校验和纠错_详解
  10. 深度学习(十八)基于R-CNN的物体检测-CVPR 2014
  11. android 多次点击事件,Android按钮onclick事件在多次单击后激发
  12. 论文引介 | Information Extraction with Reinforcement Learning
  13. C++中begin、end、front、back函数的用法
  14. nginx启用reuseport
  15. html群聊插件,团队群聊.html
  16. 深度学习中常用的损失函数
  17. 读我(Readme)
  18. AE使用中的常见错误01
  19. Ubuntu16.04下RealSense D435i的安装和使用
  20. 内存管理(二) ARC

热门文章

  1. 如何确定软件测试结束的标准
  2. 从外卖小哥到月入两万的城市经理,他在无锡见证外卖大战
  3. Eclipse保存文件时出现字符编码错误
  4. 关于wxpy,使用Python玩转微信的问题
  5. MySQL数据库启动报The server quit without updating PID file
  6. Acronis Disk Director 10 硬盘操作详细教程(三)分区表修复
  7. ActiveMQ常见问题
  8. 年薪50万,副职级别!注册安全工程师的前途如此光明?
  9. JavaMoney规范(JSR 354)与对应实现解读
  10. 开会迟到,代码不规范,晚上八点半去健身,跟leader坐电梯自己先出去!某新入行程序员被疯狂吐槽!...