学习的原因
学习的原因:
1、web前端招聘要求 - 熟悉或了解一门服务器端技术者优先(node.js)
2、熟悉服务器端机制 和 流程后,更好提高前端的开发(防止背锅)
扩展:
技术类型发展方式
全栈 - 客户端(PC+移动端)+ 服务器端 + 数据库,设置到多个领域,每个领域都不精通,但是会用,不会创造(你会就行,不用做,工资够高就可以)
专家 - 在某一个领域最屌的
管理 - 项目经理、技术总监
销售 - 产品:出去和别人谈生意,需要知道业务逻辑/流程
创业 - 不推荐
教育
可能成为全栈的语言
java - 不包含移动端
JavaScript语言
客户端 - 开发根本
服务器端 - node.js历史上第一次出现一门语言可以通吃前后端
数据库 - mongoDB非关系型数据库中最火的一个,mysql,oracle关系型数据库
移动端 - 跨所有平台的(andriod+ios),你只需要学习一点点ios和andriod的语法即可完成(三阶段混合开发框架uniapp)
全栈课程:Node.js2天 + mongoDB1天 + ajax3天 + Node.js框架(express框架)
最终目的:登录+注册+注销账号+修改密码+全栈一条龙
基本内容:
服务器概念
简单来说就是一台PC机
生活中使用的是 微机
商业中使用 小型机(ibm和联想:大概造价在几十万,好的上百万)、中型机、大型机、超级计算机(国家:天河一、二号,神威太湖之光)
我们如何才能获得一个服务器呢?
1、硬买一台 - 中小型公司难以承受
2、租一台 - 新浪/阿里/腾讯/百度云...租服务器,按年/月,根据你选择的配置不同价格也不同
3、买二手货 - 一万块左右就能搞定
4、配置一台性能好一点的微机 - 同时访问量过大,可能就会down机了
对于开发人员
硬件服务器 - PC机
软件服务器 - 中间件(软件将我们普通电脑变为一个服务器node.js)
应用架构
C/S - client客户端/server服务器端
举例:
QQ、微信、微博
大型网游
优点:
1、用户体验感好
2、运行稳定的
3、对带宽的要求低
缺点:
1、占硬盘空间
2、更新过于复杂 - 服务器端要更新,客户端还要更新
B/S - browser浏览器端/server服务器端
举例:
网页QQ、微信、微博
网页游戏
优点:
1、更新容易 - 服务器端更新
2、不占硬盘空间
3、不看你的电脑配置
缺点:
体验相对较差(越来越好)
对带宽的要求高(我们现在的网速越来越快了)
1、Node.js概述:
Node.js不是JS,但是和JavaScript的语法非常相似,是一种服务器端技术,他的竞争对手PHP/JAVA/C++/C#/PYTHON - 历史上第一次一门语言可以通吃前后端 - 前端崛起原因之一
很像:但是做的事儿不一样
JS:做特效
Node:前端 <=桥梁(服务器端)=>数据库的
版本:16年初(0.12) 16年中(4.x) 16年底(6.x) 22年底(19.x)
意味着:行业有发展,正在发展中,现在确实不算牛逼,缺乏一个超级大框架。其实每次都没更新啥
目的:1、通过node.js书写代码来搭建一个私网服务器,让我们局域网内的人员可以来进行访问 - 免费
2、搭配上数据库玩全栈
下载安装:LTS长效稳定版 - 双击node-v18.12.1-x64.msi,一直点下一步,不要取消任何东西,就装C盘
检查自己是否安装成功:打开cmd输入node -v回车如果你能看到版本号则安装成功
2、如何运行node.js
如何运行node.js - 我们安装的node.js其实是一个运行环境,可以让我们的js脱离浏览器运行,但其实已经不是javascript
1、交互模式:- 用于临时测试
打开cmd输入node回车,就可以开始敲你的"js"语句
输入一行执行一行
2、脚本模式 - 开发常用方式
建一个xx.js文件,里面书写您的"js"代码 ,
打开cmd输入node 完整的文件绝对路径,回车
3、随着编辑器慢慢的强大,我们编辑器有了插件:
前提:cmd可用,才能安装插件
1、HBuilder:node eclipse - 安装好了重启HBuilder,然后对着文件代码处右键运行
2、VSCode:code runner - 安装好了重启VSCode,然后对着文件代码处右键第一个选项就可以运行,或者 右上有个开始按钮
我们写的不是JavaScript只是和JavaScript长得很相似的Node.js
3、JavaScript和Node.js区别:
1、JavaScript:ES+DOM+BOM
2、Node:ES一切东西都可用,但是没有DOM和BOM,意味着他不是做特效,很成百上千上万个【模块】等待我们学习
modal - 模态框/半透明遮罩层
model - 模型/数据
module - 模块
4、Node.js特有概念 - 模块
一个web项目功能可以分为很多个不同的模块,比如商品模块、用户模块、支付模块、促销模块、商家模块...
node.js按照功能的不同,可以将函数、对象分别放到不同的文件/目录下,这些文件/目录在node.js中就称之为是一个模块,暂时可以简单理解为xx.js就是一个模块
1、*模块化开发:分工合作、明确责任
node底层其实有一句话,我们虽然看不见:
(function(exports,require,三个){
})()
1、*主模块 - 引入别的模块进行使用
var xx=require("./模块文件名");
特殊:./不可以省略
2、*分支/子模块 - 公开东西给别人使用
1、第一种方式:
exports.属性名=属性值;
exports.方法名=function(){};
2、第二种方式:
module.exports={
属性名:属性值,
方法名:function(){};
}
2、Node.js中模块的分类
1、官方模块 - 不需要下载安装,在你安装node.js环境的时候就已经安好了
2、第三方模块 - 需要用npm去下载,明天再玩,多的一批:mongoose(数据库)、express(Node的框架,简化原生Node的)
3、自定义模块:目前说白了就是一个xx.js
3、官方模块学习:
1、官方模块
global - 不需要引入的,可以直接使用的,全局对象依然可以省略不写
exports:用于向外导出自己的成员
require:引入其他模块
__filename:返回当前模块的文件绝对路径 - 全名
__dirname:返回当前模块的文件绝对路径但是不包含模块名 - 对vscode你们有的人有用:你可能在node.js某一处不允许使用相对路径,但是你写绝对路径又怕累,怎么办,就靠__dirname
module:指代当前模块本身!包含着以上4个操作
以下两个人不是当初的人,但是用法和当初一致
console:控制台对象
定时器:周期性和一次性和瞬间定时器
面试题:exports可以公开,那module.exports也可以公开,他们的区别在哪里?
node.js底层有一句话:var exports=module.exports;意味着两个人其实都可以公开/暴露
但是如果你用了这句话:exports={},就覆盖了上面module.exports这句话,不再具有公开暴露的功能了
真正具有公开功能的是module.exports
2、querystring - 查询字符串:解析前端传来的查询字符串(请求消息、前端发来的东西)部分
必须引入:var qs = require('querystring')
var obj=qs.parse("查询字符串部分")
垃圾:仅仅只能解析查询字符串部分,一个url可是由5个部分组成,url里面带有他,我们绝对不会单独使用此模块
3、*url - 解析前端传来的完整的url网址的各个部分
必须引入:var url = require('url')
var obj=url.parse("完整的url",true)
尤其记住两点:明天有大用
*获取路由:obj.pathname
*获取请求消息:obj.query.键名