nodejs基本介绍
为什么要学习nodejs
1.作为一个前端工程师,为什么要学习服务端的开发?
2.市场对前端全栈的看法如何?对node的看法又是如何?
3.是否node如大厂所用的那样,只能作为中间件来使用?
4.在2019年的前端生态中,身处深水区后前端的时代node又扮演什么样的角色?
- 为什么学?通过学习Node.js开发理解服务器开发、Web请求和响应过程、 了解服务器端如何与客户端配合
- 作为前端开发工程师(FE)需要具备一定的服务端开发能力
- 作为全栈的热爱者以及javascript发烧友,掌握node已经是刚需!
- 如果你和我一样热爱javascript!那么就应该感谢nodeJS把它推到了互联网浪潮的顶峰,如果说AJAX是JS第一次大放异彩的推动者的话,那么nodeJS一定又将JS推到了历史的前面!
服务器端开发语言有很多,为什么要选择nodejs
- 降低编程语言切换的成本(nodejs实质上用的还是javascript)基于Google的V8引擎
- NodeJS是前端项目的基础设施,前端项目中用到的大量工具 (大前端) webpack less-css
- 对于前端工程师,面试时对于nodejs有一定的要求
node.js 是什么?
node.js,也叫作node,或者nodejs,指的都是一个东西。
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,nodejs允许javascript代码运行在服务端
1. nodejs不是一门新的编程语言,nodejs是在服务端运行javascript的运行环境(说白了还是javascript)
2. 运行环境:写得程序想要运行必须要有对应的运行环境
java与tomcat
php代码必须要有apache服务器(LAMP...) linux+apache+mysql+php
在web端,浏览器就是javascript的运行环境(Webkit,Trident,Gecko,Presto,Blink)
在node端,nodejs就是javascript的运行环境
2. javascript并不只是能运行在浏览器端,浏览器端能够运行js是因为浏览器有js解析器,因此只需要有js解析器,任何软件都可以运行js。
3. nodejs可以在服务端运行js,因为nodejs是基于chrome v8的js引擎。
nodejs的本质:不是一门新的编程语言,nodejs是javascript运行在服务端的运行环境,编程语言还是javascript
nodejs与浏览器的区别
相同点:nodejs与浏览器都是javascript的运行环境,都能够解析js程序。对于ECMAScript语法来说,在nodejs和浏览器中都能运行。
不同点:nodejs无法使用DOM和BOM的操作,浏览器无法执行nodejs中的文件操作等功能
原理:nodeJS之所以不能使用DOM和BOM操作,是因为没有顶层对象window和BOM对象,当然就不能调用它们上面的WEBAPI,而浏览器端因为没有对系统级操作的封装,所以也不能使用nodeJS等API功能!
思考:
- 在浏览器端,可以使用javascript操作数据库么?
- 在nodejs端,可以使用BOM和DOM的方法么?
- 学习nodejs,学习什么内容?
nodejs可以干什么?
- 开发服务端程序,做中间层(前端的2次革命,第一次是AJAX)
- 开发命令行工具(CLI),比如npm,webpack,gulp,less,sass等 vue-cli
- 开发桌面应用程序(借助 node-webkit、electron 等框架实现)
安装nodejs
nodejs版本
下载地址
官网术语解释
- LTS 版本:Long-term Support 版本,长期支持版,即稳定版。
- Current 版本:Latest Features 版本,最新版本,新特性会在该版本中最先加入。
查看node版本
node -v
查看npm版本
npm -v
开启服务器
npm start
运行node
node helloNode.js
运行nodejs程序
- 创建js文件
helloworld.js
- 写入nodejs的内容:
console.log('hello nodejs')
- 打开命令窗口
cmd
- shift加右键打开命令窗口
- win+r打开运行窗口,输入cmd打开命令行窗口
- 执行
node 文件名.js
即可 - 给vscode安装
terminal
插件,直接在vscode中执行,terminal插件可以让我们方便调试程序,直接在vscode上面打开终端(黑窗口)
- 执行命令:
node helloworld.js
注意:在nodejs中是无法使用DOM和BOM的内容的,因此document, window
等内容是无法使用的。
global模块-全局变量
Node.js 中的全局对象(顶层对象)是
global
, 类似于浏览器中的window
常用的global属性
console: 用于打印日志
setTimeout/clearTimeout: 设置清除延时器
setInterval/clearInterval: 设置清除定时器
__dirname: 当前文件的路径,不包括文件名
__filename: 获取当前文件的路径,包括文件名
//与模块化相关的,模块化的时候会用到
require
exports
module
fs模块
fs模块是nodejs中最常用的一个模块,因此掌握fs模块非常的有必要,fs模块的方法非常多,用到了哪个查哪个即可。
在nodejs中,提供了fs模块,这是node的核心模块
注意:
- 除了global模块中的内容可以直接使用,其他模块都是需要加载的。
- fs模块不是全局的,不能直接使用。因此需要导入才能使用。
const fs = require('fs');
读取文件
语法:fs.readFile(path[, options], callback)
方式一:不传编码参数
//参数1: 文件的名字(读哪个文件)
//参数2: 读取文件的回调函数
//参数1:错误对象,如果读取失败,err会包含错误信息,如果读取成功,err是null
//参数2:读取成功后的数据(是一个Buffer对象)
//ES5
fs.readFile('data.txt', function(err, data){
console.log(err);
console.log(data);
});
//ES6
fs.readFile('data.txt',(err,data)=>{
console.log(err);
console.log(data);
})
方式二:传编码参数
//参数1: 文件的路径(读哪个文件)
//参数2: 编码,如果设置了,返回一个字符串,如果没有设置,会返回一个buffer对象
//参数3: 回调函数
//es5
fs.readFile('data.txt', 'utf8',function(err, data){
console.log(err);
console.log(data);
});
//es6
fs.readFile('data.txt','utf8',(err,data)=>{
console.log(err);
console.log(data);
})
关于Buffer对象
1. Buffer对象是Nodejs用于处理二进制数据的。
2. 其实任意的数据在计算机底层都是二进制数据,因为计算机只认识二进制。
3. 所以读取任意的文件,返回的结果都是二进制数据,即Buffer对象
4. Buffer对象可以调用toString()方法转换成字符串。
写文件
语法:fs.writeFile(file, data[, options], callback)
//参数1:写入的文件名(如果文件不存在,会自动创建),有读就有写
//参数2:写入的文件内容(注意:写入的内容会覆盖以前的内容)
//参数3:写文件后的回调函数
//ES5
fs.writeFile('data.txt', 'hello world, 我爱node!', function(err){
if(err) {
return console.log