1.认识node_modules
js 前端语言 运行在浏览器 浏览器的js 没有读写文件的功能
input:type=file 可以选中自己本地的资源
Node.js:js在服务器运行(基于Node运行),能够对服务器文件进行操作读写
把Node安装再来服务器上 在Node环境下运行js,node赋予了js进行I/O操作的能力
I/O I:input输入 O:output:输出 通过node.js可以更改读写文件内容
/学习在node环境 js的语法都有什么
客户端 全局下 window 大对象 JS在客户端中全局对象是window(内置的方法)
服务器 全局下 global 大对象 JS在node运行全局 对象是global;
1.Node 是基于V8引擎渲染和解析js,它不是后台语言,是一个工具或者环境,用来解析js的工具和环境,为什么或是后台语言,主要一般会把node安装在服务器上,在服务器上运行js代码,通过node解析的js代码可以做服务器一些事情
1):学习webpack,webpack编译打包工具,基于node运行的
2): npm 安装一些模块 npm,install,jquery --save-devnpmjs.com
2.基于Node构建中小型项目(js是一门全栈语言)
node 应用
1.中小型项目 可以用node做
客户端请求 <--> 服务器(基于node)
1. 浏览器地址 发送请求
2. 服务器根据传输过来路径,找到对应资源文件 进行读取 返回给客户端
第一次为资源文件请求
3.解析代码 遇到src,href再次发生请求
这次为ajax请求 一般为数据
4.服务器响应 进行读写数据库
2. 作为中间层
Node特点:单线程异步 无阻塞I/O 事件驱动
服务层:抗压能力和并发能力很强
作为中间层 对客户端发送过来的请求进行继承逻辑处理 在发送给服务端
2.node模块管理
模块管理规范
AMD require.js
CMD sea.js
Common.js node.js
一个js文件就是一个模块 这些模块化思想 规定了js中我们的模块如何创建 如何导入 以及导出
Node中模块管理
1.在node环境下 我们创建一个js 相当于创建一个新的模块 模块中的方法都是这个模块私有的方法 不同的模块中同名方法 不会有任何冲突
2.node给其提供一个导出模块中方法的语法
module.exports = {} //导出
3.require是node天生提供导入模块的方法,require导入的模块是同步 a中代码从前到后需要解析一遍 没有导入完成 不能做后面的事
1.内置模块(核心模块) 2.第三方模块(axios,jquery) 3.自定义模块(自己创建的js)
1) 可以省略后缀名.js
2) 如果是调用自己的自定义模块 则需要加上相对路径/(根目录)./(当前目录)../(上级目录)
3) 不加地址 先找第三方模块 再找核心模块 在找不到报错 throw err
3.node npm
1.Npm: 跟随安装node时,一并下载了Npm,下载完Node 可以使用Npm命令
把模块安装在全局环境和安装在当前项目中
安装在全局
命令:npm install jquery --global(npm install -g jquery)
安装在本地
命令:npm install xxx;
package.json:距离安装过的模块小本本
npm init -y
删除 npm uninstall less --save-dev
把模块安装设置为开发依赖(开发中)
npm install less --save-dev
把模块设置为生产依赖(部署到服务器上)
npm install axios(npm install axios --save)
babel-loader:用来把ES6编译成ES5的模块,代码最后上线时是ES5;在项目不是到服务器之前需要把ES6通过babel-loader编译成ES5;当前项目上线就不再需要babel-loader 所以这是一个开发依赖
npm root -g 查看全局路径
安装到全局和本地的区别
1)安装到全局对任何项目都有作用
2)安装到本地只对当前项目有作用
在安装模块之前 一般先npm init -y,生成一个package.json配置文件
把安装的模块生成配置清单 存放着package.json文件中,后期别人需要部署项目是,只需执行npm i就可安装在package.json中所有依赖,这叫跑环境
npm i:把开发和生产依赖都安装一遍
npm i --production 只安装生产依赖模块
package.json 可以基于script选项配置本地可以执行的脚本命令
npm run+script的属性名 相当于把这个属性名对应属性值放在命令窗口执行一次
开发环境 正在开发的项目的代码
生成环境 是指上线的项目代码
主干 生产环境的代码
分支 开发环境的代码
test set NODE_EVN=dev&&node a.js/设置全局变量
在NODE里设置
set NODE_EVN=production //node里设置全局变量
4.node 内置模块
三种模块 内置模块 第三方模块 自定义模块
fs 文件操作系统/运行在node环境下 不是运行在浏览器
1.readdir 异步读取指定的文件目录 读取完毕 触发第二个参数 第二个参数必须是回调函数 会给回调函数传入2个参数err 读取的错误的信息 result 读取的结果 如果读取成功 err 是null 读取成功返回一个数组
2.readdirSync 同步读取指定目录 返回数组 包含目录的字符串 读取完成后 执行下面方法
3.readFileSync 读文件;
4.readFile
5.writeFileSync(path,内容,编码格式)
6.writeFile 异步 当写入文件成功是 执行这个回调函数
7.appendFileSync 向文件追加内容
8..appendFile 向文件追加内容 异步
9.copyFileSync 把文件里面内容拷贝新文件中 并替换到原来内容 覆盖
10.copyFile 异步
11.mkdir 创建文件夹目录
12.rmdir 删除文件夹目录 异步
13.unlink 删除文件
5.express中间件
let express = require("express");
let bodyParser = require("body-parser");
let app = express();
app.listen(8080,function(){
console.log("8080端口已启动");
})
// 中间件:在创建完服务以后和处理请求之前,我们提前做一些事情
// 服务器可以提前将json中的数据读取出来,提前准备好,当真正的请求来临之时,不需要再去花费时间读取,直接取到返回就好;一般情况下,把数据放到请求体上 req.body这个属性上,或者请求主体的信息也一般当道req.body上;因为每个请求都可以直接从req.body获取;
app.use(function(req,res,next){
// req:请求信息
// res : 响应信息
// next: 下一步
// console.log(666);
req.a=1999;
next();
})
// 通过执行不同的方法把客户端POST请求传递的内容转化为对象存放在了req.body上
//
app.use(bodyParser.urlencoded({
extended:true
}));
// 为了处理静态资源文件;就是html css
app.use(express.static("./client"));
// 路由: 前端一个请求,后台就对应一个路由
app.post("/login",function(req,res){
console.log(req.body)
})
app.post("/list",function(req,res){
console.log(req.body)
})
// 一个完整项目: 包含了前端和后端的代码,整个项目要最后要部署在服务器的某个端口下;【0-65535】;
// 前端: 前端的
// 后端: 要做监听;启动服务;运行一段固定的后台代码,就能启动一个服务
6.mine模块
//mime 第三方模块
//内置模块跟随下载安装node时 就下载完毕了
let http = require("http");
let mime = require("mime");
let fs = require("fs");
let url = require("url");
http.createServer(function(req,res){
let {pathname}=url.parse(req.url,true);
//mime 在mime模块有一个getType方法 会根据文件后缀名 返回对应的content-type类型
// res.setHeader 响应头
res.setHeader('content-type',mime.getType(pathname))
fs.readFile("."+pathname,function(err,data){
res.end(data)
})
}).listen(8080);```