1. node.js基础
-
node.js是一个开源的跨平台的JS运行时环境 * 给了JS除了浏览器以外的另一个运行场景
-
好处: * 能够让JS脱离浏览器在其他地方可以运行,其实就是在电脑系统上操作当前系统的一些目录文件,还有连接数据库
-
缺点: * JS由BOM和DOM还有ES组成,之前可以用是因为把JS引入到了浏览器中但是在node.js中不引入浏览器了所以BOM和DOM就已经没有了只有一些ES语法规范
-
代码没有错误,要看JS代码的运行环境
-
运行node.js * window + r , cmd,在小黑框中node回车,目前进入到了node的运行环境类似于浏览器的控制台 * 书写一个JS文件,将JS代码全都放在这个文件中,在文件夹中找到当前JS文件,在文件夹的地址栏单机输入cmd,回车,此时cmd的弹出框路径就是当前文件所在的文件目录地址,此时输入命令node 文件名回车,再次运行这个文件可以重新输入文件名然后回车或者上回车,如果首次输入,写文件名时前面文件名正常输入(这一部分一定能找到对应文件)然后按下TAB键会自动补全文件名 * 书写一个JS文件右键文件名选择在集成终端中打开,输入node 01TAB回车 * cls: 清空
-
cmd的弊端: * 书写的任何代码都没法保存
2. node.js的模块化开发
-
node必须使用模块化语法,因为node中没有html文件所以无法将多个JS文件合并到一起
-
node自带模块化语法,并且和ES6不同 * 导出:在node中运行的JS文件天生有一个变量叫做module,module中的exports中可以放需要导出的东西,module中的children记录了导入的内容,module中的paths与第三方模块有关,在module中exports默认是一个对象,而且module是一个对象,根据规则我们可以随意导出任何东西可以是数组,字符串,数字而且exports一定会被导出,在node中天生自带一个变量exports自带一个地址指向module中的exports * 导入:在每一个要运行在node.js的文件中天生自带一个方法(函数),node导入语法中如果导入的是某个文件夹下面的文件名为index可以默认省略index,后缀是js文件可以省略.js也就是说直接导入这个文件夹就能找到这个文件夹下面的index.js文件 * require('你要导入的地址')返回值:填入的地址内导出的内容 地址的书写如果是js文件.js可以省略
-
node中的导出是默认导出的
-
模块的分类 * node中所有的内容都能叫做一个模块,比如一个JS文件 * 自定义模块:自己写的JS文件,必须先写完才能导入使用 * 内置模块:由node.js提供,直接导入使用即可 * 第三方模块:由世界上的其他程序员书写完毕上传到某一个仓库中,我们需要去这个仓库中下载
-
使用内置模块流程 * 导入内置模块 * 按照说明文档使用内置模块
js // 异步读取文件 // fs.readFile('文件路径','配置项','回调函数') fs.readFile('./index.txt','UTF-8',(error,data)=>{ // 代表接收两个形参,读取错误时的信息和读取正确的信息 if(error){ console.log(error) return } console.log(data) }) // 同步读取文件 let s = fs.readFileSync('./index.txt','UTF-8') console.log(s) // 同步读取只需要传递两个参数就可以 -
path:
js const path = require('path') const res = path.parse('路径') // 这个可以解析该路径当前信息 -
url:
js const url = require('url') const res = url.parse('路径',true) // 第二个参数决定是否深度解析,解析完之后可以把查询字符串给转成对象 -
http: * 作用:帮助我们开启一个所谓的服务器 * 服务器:提供一种服务(数据)的机器(电脑)
js const http = require('http') const app = http.createServer(function(req,res){ // 当前函数接收两个形参 // 第一个参数代表的是请求报文相关的内容,内部有请求相关的数据 // 第二个参数代表的是响应报文相关的内容,需要反馈回去的内容,需要借助第二个参数完成 console.log(req.url) // 这个可以监听到网址的变化并反馈回去,默认反馈到页面上 if(req.url === '/a'){ res.end('可以结束访问') } }) // 前端每访问一次就会执行一次 app.listen(8080,()=>{ // 给服务器监听一个端口号 console.log('开启服务成功,端口号为8080') }) // 0-65536
3. 请求补充
-
在浏览器地址栏输入一个地址,敲下回车也算是一个请求,此时请求的主体是浏览器,此时服务器做出的任何响应(反馈)都是给回浏览器中
-
html标签中link和script标签中的scr也算是一个请求,这里也算是一个请求,此时请求的主体是标签,那么服务器做出的任何响应都是给回标签的
-
JS代码中的ajax请求,那么请求主体就是ajax,最后的相应内容就给到了ajax
-
请求完整路径: * ./....找此层级的某个文件 * ../...找上一级的某个文件 * /...找根目录中的某个文件
-
前端和后端共同的约定: * 静态页面的开头地址为views+文件名
js const http = require('http') const fs = require('fs') let app = http.createServer(function(req,res){ if(/^(\/views)/.test(req.url)){ fs.readFile(`./client${req.url}`,'UTF-8',(error,data)=>{ if(error){ fs.readFile(`./client/views/404.html`,'UTF-8',(error,data1)=>{ res.end(data1) // return }) return } res.end(data) }) } app.listen(1255,()=>{ console.log('开启服务器成功') }) })