node定义
-
Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.
-
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。
-
这个是 node 官网的解释
-
其实 node 就是用 javascript 语言写 后端
-
也就是说,我们的 javascript 有了 node 以后,不光是一个前端语言,也是一个后端语言
-
node其实一个是一个软件(解析js) :独立安装的 v8解释引擎
-
-
前端 javascript
-
三大核心
-
ECMAScript
-
DOM
-
BOM
-
-
操作内容
-
浏览器
-
解决兼容问题
-
-
-
后端 javascript (node)
-
核心
-
ECMAScript
-
-
操作内容
-
后端代码
-
数据库
-
-
-
也就是说,node 我们不需要解决兼容问题,不需要 DOM 和 BOM,只关注业务逻辑就可以了
下载 node 安装包
-
我们的电脑是没有自带 node 环境的
-
需要我们手动下载一个 node 安装包,安装 node 环境
-
有了 node 环境以后,我们就可以运行 node 了
-
下载方式
检测安装环境
-
检测安装是否成功
-
我们打开运行窗口 (win + r)
-
就是我们键盘下面那个 windows 的窗口键 + r 键
-
-
写入 cmd 然后按下回车,来到我们的命令行
-
然后在命令行写入一个指令
$ node -v // mac用$
-
然后按下回车,会得到一个 node 的版本号
-
能看到版本号表示 node 环境安装成功
-
至此,我们的 node 环境就有了
-
我们就可以再电脑里面运行我们的 node 了
直接在终端中书写 js 代码
-
打开命令行
-
书写指令
$ node //mac 用$
-
直接按下回车,会看到 光标在闪烁,我们就进入了 node 代码编写环境
-
直接书写代码就可以了
在命令行运行一个 js 文件
-
先新建一个文件夹
-
在里面写一个 js 文件
-
我这里默认在
桌面/demo文件夹/idnex.js
-
-
在文件里面写一些 js 代码
// index.js
console.log('hello node') -
打开命令行,要让命令行的路径和你存放这个要执行的 js 文件的目录一致
-
切换好以后,我们直接使用指令来运行我们准备好的 js 文件
$ node index.js // mac $
-
然后就会在命令行把我们刚才写的 js 文件运行了
-
就会在控制台输出
hello node
-
现在我们就已经运行了一段 js 代码在命令行了
-
这也就解释了一下最开始官网说的那句话
-
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。
-
我们的 node 安装完毕以后,就在命令行提供了一个基于 Chrome V8 引擎的运行环境
-
在这个环境中运行 javascript 代码
-
这个就是 node.js
-
-
常用的命令操作
-
cd.. 返回上一层
-
d: 切换盘符
-
mkdir 目录名 创建目录
-
cls 清屏
-
ctrl+c 退出程序
-
exit 退出窗口
NODE 的导入导出
-
node
的开发是模块化开发 -
每一个 js 文件都是一个独立的模块
-
都有自己独立的作用域
-
我们可以通过 导入导出 的方式把多个 js 文件合并在一起;可以将 不同的 代码 放到不同的 js文件中,在需要 使用js文件中引入
导入
提供 接口(提供给 其他文件 可以引入 接口)
提供多个接口
a.js
exports.a= 10;
exports.b=function(){};
exports.c = {}
引入:
var m1 = require("./a")
var { a,b } = require("./a") //解构赋值
提供一个接口 (一个文件只能有一个module.exports)
a.js
module.exports = function(){
console.log(111)
}
-
在 node 里面,我们使用
require
来导入一个文件 -
// 我是 index.js 文件
require('./a.js')
console.log('我是 index.js 文件')
-
当我在命令行运行
index.js
文件的时候-
首先会把
a.js
文件运行一遍 -
然后再继续执行我自己文件内部的代码
-
-
也可以在导入的时候接受另一个文件导出的内容
// a 接受到的内容就是 a.js 这个文件导出的内容
// 如果 a.js 文件中什么都没有导出,那么接受到的就是一个 空对象
const a = require('./a.js')
导出
-
我们在写一个 js 文件的时候,可以向外导出一些内容
-
将来在这个文件被导入的时候,就可以接受到一些内容
// 我是 a.js
// 每一个 js 文件都会有一个对象叫做 module
// 在 module 里面有一个成员,叫做 exports
// 每一个 js 文件会默认把 module.exports 导出
// 也就是说,我们向 module.exports 中添加什么内容
// 那么就会导出什么内容
module.exports.name = 'Jack'
module.exports.age = 18 -
将来这个文件被导入的时候,接受到的内容就是一个对象,里面有两个成员
// 我是 index.js
const a = require('./a.js')
console.log(a) // { name: 'Jack', age: 18 }
模块化
引入文件 在某个js中引入这个模块 被引入文件 (定义模块)
-
在 node 的开发过程中
-
我们是把每一个功能独立做成一个模块
-
然后在使用 导入导出 的方式把他们关联在一起
-
利于维护
-
准确定位
-
模块分类
-
我们一般把模块分为三种
-
内置模块 (node 天生就带有的模块,系统模块)
-
第三方模块 (从网上下载的别人写好的模块,npm安装)
以上两种模块,可以不写目录名 直接写模块名
-
自定义模块 (我们自己写的文件,即使在同一目录也要加路径 ./ 否则会解析为 系统模块或者 第三方模块)
-
NODE 常用的内置模块
-
刚才是我们自己写的模块
-
现在我们来聊聊常见的内置模块
FS 模块 (filesystem)
-
fs
是 node 的一个内置模块 -
专门用来操作文件的
-
使用的时候直接导入就可以使用了
const fs = require('fs')
// 接下来就可以使用 fs 这个变量去操作文件了
异步读取文件内容
-
异步的读取某一个文件内的内容
const fs = require('fs')
// 因为是异步读取,所以要在回调函数里面获取结果
fs.readFile('./text.txt', 'utf8', function (err, data) {
// err 表示读取的时候出现的错误
// data 表示读取到的内容,如果出现错误,那么是 data 是没有内容的
})
同步读取文件内容
-
同步读取某一个文件的内容
const fs = require('fs')
// 因为是同步读取,所以直接以返回值的形式接收读取的内容就可以
const res = fs.readFileSync('./text.txt', 'utf8')
// 同步读取的时候,如果出错会直接在控制台报错,并中断程序继续执行
// 如果没有错误,res 就会得到文件中的内容
异步写入文件
-
异步的向某一个文件中写入内容
const fs = require('fs')
// 写入内容的时候,一般不会出现错误
// 因为如果没有这个文件的话,会创建一个这个文件在向里面写入内容
// 所以回调函数一般没什么用处,只不过是在写入文件结束后做些事情而已
// 虽然没有用处,但是必须要写
fs.writeFile('./text.txt', '我是要写入的内容', function () {
console.log('写入完成')
})
同步写入文件
-
同步的向某一个文件内写入内容
const fs = require('fs')
// 因为是写入文件
// 没有返回值,因为一般都会写入成功
fs.writeFileSync('./text.txt', '我是要写入的内容')
HTTP 模块
-
因为 node 是一个服务端语言
-
所以 node 一定也可以开启一个服务器,开启一个服务
-
http
这个模块就是专门用来开启服务,并且接受请求,返回响应的 -
http
也是一个内置模块,直接导入使用就行const http = require('http')
// 接下来就可以使用 http 这个模块去开启服务了
创建一个服务
-
要开启先要创建一个服务
const http = require('http')
// 创建一个服务
// 这个服务默认监听 http 协议
// 这个服务默认监听 localhost 域名
// 返回值就是这个服务
const server = http.createServer(function (request, response) {
// 前端发来的每一个请求都会触发这个函数
// request 包含着所有的请求信息
// response 是所有的响应信息
})
监听一个端口
-
确定这个服务监听哪一个端口
const http = require('http')
// 创建一个服务
const server = http.createServer(function (request, response) {
// 前端发来的每一个请求都会触发这个函数
})
server.listen(8080, function () {
// 这个函数会在服务开启成功以后执行
console.log('listening on port 8080')
})
给出一个响应
-
简单给出一个响应
const http = require('http')
// 创建一个服务
const server = http.createServer(function (request, response) {
// 前端发来的每一个请求都会触发这个函数
// 接受到请求以后给出一个响应
response.end('hello world')
})
server.listen(8080, function () {
// 这个函数会在服务开启成功以后执行
console.log('lintening on port 8080')
}) -
此时,打开浏览器
-
地址栏输入
localhost:8080
-
浏览器就会响应文字
hello world
(如果不显示,在终端运行一下再去浏览器打开)