node.js简单概述
不是JS,但是语法和JavaScript非常相似
目的:
1、使用代码搭建一个服务器&文件系统(服务器文件可以放在任何位置,但是不在你的电脑里,你也可以根据网址来访问我的东西)
2、Node.js如何沟通前端和数据库(增删改查)
Node.js知识
1、js和node的区别
相同点:都可以使用一切的ECMAScript(那11个)的东西,包含一切的API,都可以使用,在服务器端不存在任何浏览器,所以不必担心兼容问题
不同点:
1、JavaScript:ES+BOM+DOM - 做特效的
2、Node.js:一切的BOM和DOM都没有,虽然没有BOM和DOM,但是他却又10万+个以上的模块等待我们学习
2、模块(module):每一个xx.js,都可以称之为是一个模块
1、模块化开发:如果以一个网站来说,我们可以按功能分为很多模块:商家模块、商品模块、促销模块、用户模块、产品模块....
分工合作:将每个模块交给对应的人完成,最后再由【主模块】进行引入:
1、每一个模块都有一个操作,可以用于公开/暴露自己的成员
Node.js自带一个预定义变量:exports,可以直接使用,是一个对象,放在此对象里面的东西,就是允许公开的东西
语法:
1、exports.属性名=值;
2、module.exports.属性名=值;
3、module.exports={
属性名:属性值,
...
}
错误导出法:
exports={
"name":"袍哥1",
"age":18,
hobby:"吃饭"
};
2、每一个模块(主模块)都有一个操作,可以用于引入/导入其他模块
Node.js自带一个预定义变量:require,可以直接使用,是一个函数,放在此函数里面的路径,就是允许引入的模块文件
语法:
var x=require("./路径");
面试笔试题:exports和module.exports有什么区别?
1、语法、写法,用法不同
2、都是用于公开暴露自己的成员的
但是exports={},写法是错误的
其实Node.js底层有一句话:exports={}
其实真正做公开功能的是module.exports
如果你使用了 exports={};//你创建了一个新的空对象,把module.exports覆盖了,所以不再具有公开的功能
2、模块的分类:
1、官方模块 - 今日的目标,大概有二十几个,但是重要的其实只有几个
2、第三方模块 - 在npm上放着的,多到数不清楚,提供了很多官方没有的东西,明天我在学习,可以上传也可以去下载
3、自定义模块
Node.js最大的特点:
1、快,非常快 - 以前最快的是php,js的速度是php的十六倍
2、为什么这么快
1、因为官方模块提供的东西少,甚至连操作数据的API都没有提供过
2、使用chrome浏览器的v8引擎
3、官方模块:不需要下载,在你安装node.js环境的时候就已经带上了,但是某的模块需要引入,某的模块不需要引入
1、Global模块:不需要引入的,可以直接使用
提供了:
1、五个预定义变量,可以直接使用了
1、__filename - 获取到当前文件完整的绝对路径
2、__dirname - 获取当前文件绝对路径,不包含文件的名字,何时:vscode的某些同学可能不支持node.js上书写相对路径,只能书写绝对路径,但是绝对路径全由自己写又很累,有了此变量我们可以直接拼接!- 【文件系统】!
3、*exports - 空对象,可以用于公开暴露自己的成员
4、*require - 函数,可以用于导入其他模块
5、***module - 指代当前模块本身,甚至包含着以上4个操作
2、定时器(周期性、一次性、瞬间定时器):定时器不是当初的定时器,只不过用法和当初一摸一样!
3、console也不是当初的console,只不过用法和当初一摸一样!
2、querystring模块:解析查询字符串,使其变成一个对象,可以获取到前端传到后端的消息(前端传到后端的消息-请求消息)
需要引入:var qs = require('querystring');
作用:解析url中查询字符串部分的功能
var obj=qs.parse("查询字符串");
想要获得前端传来的每一个部分:obj.键名;
垃圾:如果前端传来的是一个完整的url网址,他就解析不了
3、***url模块 - 今日小重点
需要引入:var url = require('url');
作用:解析url中各个部分的功能
var objUrl=url.parse("完整的url",true);//支持第二个参数,是一个布尔值,默认为false,一旦设置为true,就会自动使用querystring的parse方法去解析查询字符串部分
重点:
1、查询字符串/请求消息:objUrl.query.键名; - 前端form(GET)表单提交到后端的东西
2、路由/文件相对路径/请求地址:objUrl.pathname - 判断路由的不同,去读取不同的HTML发送给我们的用户看!
4、Buffer模块:缓冲区,可以将数据变成一个16禁止的数字,你可以理解为是Node.js中的一种新的数据类型,但是我们绝对不会手动使用,因为我们一眼看不懂!
但是后端的一些API可能会导致我们被动得到Buffer,但是你也别怕,因为Node.js中大部分API,都是支持Buffer
5、*****fs模块 - 今日大重点:fileSystem文件系统
需要引入:var fs = require('fs');
*异步读取文件:
fs.readFile(文件路径,(err,buf)=>{
console.log(buf);->读取到了要干什么,必须放在这个回调函数里面!
})
异步写入文件:
fs.writeFile(文件路径,"新内容"/buf,(err)=>{
console.log("写入完毕后要做什么,必须放在里面")
})//会替换掉原来的东西
异步追加文件:
fs.appendFile(文件路径,"新内容"/buf,(err)=>{
console.log("写入完毕后要做什么,必须放在里面")
})//不会替换掉原来的东西
强调:只有异步才能更完美的发挥Node.js的特点(快)