1、学习原因: 1、前端招聘要求 - 熟悉 或 了解一门服务器端语言者优先 2、对于我们前端来说,了解服务器端的机制,更好更快的进行前端开发 3、防止背锅
扩展:
全栈工程师 - 客户端(PC+移动端+小程序) + 服务器端(Node.js) + 数据库(mongoDB)
技术类发展:
全栈 - 涉及到多个领域,每个领域都会用,但是不必精通 -> 架构师 -> 项目经理 -> 技术总监(CTO)
专家 - 某个领域是无敌,还会创造 - 比如:Vue作者:尤雨溪
销售类发展:
产品 -> 产品经理 -> 产品总监(谈业务,是必须要懂技术的,了解用户的业务需求,业务逻辑,业务关系,制作出原型图)
教育类发展:
创业类发展:不太推荐
可能成为全栈的语言:
1、Java语言 - 里面有JavaWeb,但是不包含移动端(安卓)
2、JavaScript语言:
客户端 - 开发根本
服务器端 - Node.js 历史上第一次一门语言就可以通吃前后端
数据库 - mongoDB
移动端 - 网页/app/小程序/公众号(跨所有平台的,IOS/Andriod)
三阶段你会学习混合开发框架:h5+plus/jqueryMobile/【uniapp】- 只需要一个前端,学习一点点IOS和Andriod的语法就可以搞定了
前端的崛起导致了IOS/Andriod开发者大量失业,千万不能啃老本
Node.js三天 + Ajax三天:
对于服务器端的掌握 - 入门
最终目的:以后自学也没问题,并且我们要做出 登录 + 注册 + 增删改查
小项目:金夫人/咖啡/图书管理系统
2、基本内容: 服务器端概念: 简单来说就是一台电脑 生活中:微机 商业中/国家中:小型机(造价几十万好的上百万)、中型机、大型机、超级计算机
拥有服务器的方式:
1、买 - 对中小型公司不友好
2、买一台配置好一点的微机 - 对于别的行业的公司也不太划算
3、租云服务器 - 腾讯云、阿里云、新浪云、百度云... 配置自选:配置越好,价格越高,按年收费
对于我们开发人员来说
硬件服务器 - 人人都有一台电脑
软件服务器 - 中间件(软件可以将你的电脑变成一台服务器,人人都可以来访问你,就是我们要学习的Node.js
软件架构:服务器很重要?
C/S - Client客户端/Server服务器端
举例:
QQ、微信、大型网络游戏
优点:
1、用户体验感较好
2、运行稳定
3、对带宽的要求低
缺点:
1、占硬盘空间
2、更新过于麻烦 - 服务器端和客户端都要更新
B/S - Browser浏览器端/Server服务器端
举例:
网页版QQ、微信、游戏
优点:
1、几乎不占硬盘
2、更新简单 - 只需要更新服务器端
3、电脑在垃圾都可以玩得起
缺点:
1、用户体验感较差(越来越好,尤其是现在出了个云平台,根本不用考虑你的电脑好不好,配置如何)
2、对带宽的要求高(还好现在的网速越来越快的)
3、Node.js概述:不是JS,但是语法和JavaScript非常相似,他的竞争对手:Java、C++、C#、Python... 做的功能绝对不是特效!做的事和服务器端其他语言是一致(和数据库进行交互,成为了一个前端到数据库的中间桥梁) 目的: 1、使用代码搭建一个服务器&文件系统(服务器文件可以放在任何位置,但是不在你的电脑里,你可以根据网址来访问到我的东西) 2、Node.js如何沟通前端和数据库 3、全栈:图书管理系统(HTML+CSS+JS+Node+Mongo)
4、Node.js安装:node-v18.15.0-x64.msi - 一路往下点,哪里点不动了,就把哪里勾上,千万不要取消任何东西 版本:16年初(0.12) 16年中(4.xx) 16年末(6.xx) - 更新速度快,意味着:发展迅速,有前景,其实也没有多大的变化,更新的最多的是提升了性能 检查你安装成功没得:打开cmd输入:node -v - 查看版本号,如果有版本号代表你已经安装成功! 其实你安装的这个node.js就是一个运行环境而已!我们书写“js”不再需要浏览器了,因为根本写的就是不是js,而是node.js,只不过语法和js非常相似
5、Node.js如何运行:3种 1、交互模式 - 临时测试 打开cmd输入:node回车,就可以开始敲你的"js"代码
2、脚本/文件模式 - 正式开发中
1、先创建xx.js,里面书写自己的代码
2、打开cmd输入:node 文件的绝对路径
3、编辑器越来越强大了:安装插件,前提:至少两个方式能够成功,才可以安装插件
vscode - code runner:对着文件出右键,第一个选项就是code runner,或者 右上角有一个开始按钮
6、Node.js知识: 1、js和node的区别 相同点:都可以使用一切的ECMAScript的东西包括一切的API都可以使用,在服务器端不存在任何浏览器,所以不必担心兼容问题 不同点: 1、JavaScript:DOM+BOM - 做特效 2、Node.js:虽然没有DOM+BOM,但是他却又10万以上+的模块等待我们学习
2、模块(module):每一个xx.js文件,都可以称之为是一个模块
1、模块化开发:如果以一个网站来说,我们可以按功能分为很多模块:商家模块、商品模块、促销模块、用户模块、产品模块....
分工合作:将每个模块交给对应的人,完成,最后再由【主模块】进行引入
1、每一个模块都有一个操作,可以用于公开/暴露自己的成员
exports:Node.js自带的一个预定义变量,可以直接使用,是一个对象,放在此对象里面的东西,就是允许公开的东西
语法:
1、exports.属性名=属性值;
2、module.exports={
属性名:属性值,
...
}
错误导出法:
exports={
name:"袍哥",
age:18,
hobby:"学习"
}
2、每一个模块(主模块)都有一个操作,可以用于导入/引入其他模块
require:Node.js自带的一个预定义变量,可以直接使用,是一个函数,函数中需要书写出引入模块的路径
语法:var x=require("./文件名")
鄙视题:exports和module.exports有什么区别?
1、语法,写法,用法不同
2、都是用于公开暴露自己的成员的
但是exports={},写法是错误的
其实Node.js底层有一句话:exports=module.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、定时器(周期性、一次性、瞬间定时器):定时器不是当初的js,只不过用法和当初一摸一样
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("网址",true);//支持第二参数,是一个布尔值,默认为false,一旦设置为true,自动使用querystring模块的parse方法去解析查询字符串部分
真正的重点:
1、查询字符串:objUrl.query.键名; - 前端form表单提交传到后端的东西
2、路由/文件相对路径/请求地址:objUrl.pathname - 判断路由的不同,去读取不同的HTML发送给我们的用户看
4、Buffer模块:缓冲区,可以将数据变成一个16进制的数字,你可以理解为是Node.js中的一种新的数据类型,但是我们绝对不会手动使用,因为我们一眼看不懂
但是后面的一些API可能会导致我们被动都到Buffer,但是你也别怕,因为Node.js中大部分的API,是支持Buffer
5、*****fs模块 - 今日大重点
需要引入:var fs = require('fs');
*异步读取文件:fs.readFile("文件路径",(err,buf)=>{
buf->读取到的内容
})
异步写入文件:fs.writeFile("文件路径","新内容"/buf,()=>{
console.log("写入完毕后,要做什么,必须放在这里面");
})//会替换掉原来的东西
异步追加文件:fs.appendFile("文件路径","新内容"/buf,()=>{
console.log("写入完毕后,要做什么,必须放在这里面");
})//会替换掉原来的东西
强调:只有异步才能更完美的发挥Node.js的特点(快)
作业: 1、安装环境 2、尝试Node.js如何运行的三种方式、最后在用插件 3、使用Node.js完成:99乘法表、获取1-100之间所有的质数、数字排序、字符串替换、计算BMI、再试一试DOM和BOM是不是真的全没了 4、代老师是一个主模块: 伍文利帮我公开两个方法:一个方法计算圆的周长,一个方法计算圆的面积 孙膑帮我公开两个方法:一个方法计算矩形的周长,一个方法计算矩形的面积 昌丹丹帮我公开两个方法:一个方法计算数组求和,一个方法计算数组的平均值 5、通过fs模块将public/css/style.css复制一份名为style.backup.css的文件 6、思考题:如果没有url模块,我们如何去解析一个完整的url网址
var str="http://www.baidu.com:443/new/index.html?name=dy&pwd=123123&vip=1&email=610147162@qq.com";
解析出结果为:
{
protocal:"http",
hostname:"www.baidu.com",
port:443,
pathname:"/new/index.html",
query:{
name:"dy",
pwd:"123123",
vip:"1",
email:"610147162@qq.com"
}
}