概述
NODEJS
介绍
干嘛的
写后台管理程序,与之类似php .net java
简单的说 Node.js 就是运行在服务端的 JavaScript。
Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台。
Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎,V8引擎执行Javascript的速度非常快,性能非常好。
目标(提供的服务)
数据服务,文件服务,web服务
优势
性能高,方便、入门难度低、大公司都在用(BAT)
劣势
- 服务器提供的相对较少
- 相对其他语言,能用的上的学习资料少
- 对程序员的要求高了
环境安装
官网
开发工具
IDE偏重,对机器要求高,功能齐全,
编辑器,轻便,速度快,功能后期补装插件
IDE
Hbuild WebStorm HbuildX Eclipse
编辑器
Atom Visual Studio Code Sublime Text
node命令行
node 回车
运行js文件
window
a. 找到目标目录->地址栏输入cmd->node 文件名.js | node 文件名
b. 当前目录->右键->git bash-> node 文件名
苹果
终端->cd 目录-> node 文件名.js | node 文件名
vscode
新建终端->cd 目录->node 文件名.js | node 文件名
webstrom
terminal| run
开发注意
nodejs
使用的是ECMA
语法,不可使用DOM
,BOM
web服务器
构成
- 机器: 电脑
- 数据库:mysql | sqlserver | mongoDB | oracle
- 数据库存的是: 数字|字符
- 磁盘(硬盘) 文件本身(图,视频,PDF) 文件服务器
- 管理程序:nodejs(管理前后端工程文件)
前后端交互流程
大后端
用户 - > 地址栏(http[s]请求) -> web服务器(收到) - > nodejs处理请求(返回静态、动态)->请求数据库服务(返回结果)->nodejs(接收)->node渲染页面->浏览器(接收页面,完成最终渲染)
大前端
用户 - > http[s]请求 -> web服务器(收到) - > nodejs处理请求(返回静态、动态)->请求数据库服务(返回结果)->nodejs(接收)->返回给前端(渲染)->浏览器(接收数据,完成最终渲染)
实现
引入http模块 commonJS规范
let http = require('http')
创建web服务 返回http server对象
let app = http.createServer((req,res)=>{
req 请求体
浏览器->服务器
req.url
地址
提取地址栏数据
res 响应
服务器->浏览器
res.writeHead(200,{'Content-Type':'text/html;charset=utf-8'});响应头设置
res.write() 返回数据给前端
res.end() 结束响应 必须
})
监听服务器
app.listen(端口,[地址],[回调])
监听成功,回调一次
端口: 1-65535 1024以下系统占用
虚拟地址localhost 真实域名xx.duapp.com
更新后,需要每次服务器自动重启
推荐命令行工具:
supervisor
nodemon
安装方式:
npm install supervisor -g
ornpm install nodemon -g
问题: vscode里面有的学生电脑找不到nodemon命令?
https://s1.ax1x.com/2020/05/19/Y4GPmQ.png
静态资源托管
什么是静态资源
xx.css
xx.html
xx.js
xx.图片
xx.json
xx.字体
…
前端资源请求
<a href=".."></a>
<img src="..."/>
location.href="..."
body{
background:url(....)
}
后端资源读取
fs.readFile(文件名,[编码方式],回调(err,data));
接口实现
前端
表单:get/post/put/delete/…
js: ajax/jsonp
后端
处理方式:http[s]
address: req.url
抓取 get请求的数据 切字符 | url模块
!address: req.on('data',(chunk)=>{CHUNK==每次收到的数据buffer})
req.on('end',()=>{ 接收完毕 切字符 querystring })
postman 一个不用写前端,就可以发出各种请求的软件 下载
fs模块
磁盘操作,文件操作
读取文件
fs.readFile('文件路径',[编码方式],(err,data)=>{})
[^err ]: err 错误 ,null没有错误
变量 = fs.readFileSync('文件路径')
处理错误
try{要排错的代码}catch(e){}
try {
let data = fs.readFileSync("./html/index2.html")
console.log(data)
} catch (error) {
//处理错误信息
console.log("error====>",error)
}
console.log(2222222222222)
更名文件
fs.renameSync('改前','改后');
删除文件
fs.unlinkSync('文件路径')
删除目录
fs.rmdirSync(path[, options])
url模块
作用
处理 url型的字符串
用法
url.parse(str,true)
返回 对象 true处理query为对象
{a:1,b:2}
str -> obj 返回 对象 true
protocol: ‘http:’, 协议
slashes: true, 双斜杠
auth: null, 作者
host: ‘localhost:8002’, 主机
port: ‘8002’, 端口
hostname: ‘localhost’, baidu
hash: ‘#title’, 哈希(锚)
search: ‘?username=sdfsdf&content=234234’, 查询字符串
query: ‘username=sdfsdf&content=234234’, 数据
pathname: ‘/aaa’, 文件路径
path: ‘/aaa?username=sdfsdf&content=234234’, 文件路径
href: ‘http://localhost:8002/aaa?username=sdfsdf&content=234234#title’
url.format(obj) 返回url字符串
urlObj -> urlStr 返回str
querystring 模块
作用
处理查询字符串 如:?key=value&key2=value2
用法
querystring.parse(str) 返回对象
querystring.stringify(obj) 返回字符串
NPM
作用
帮助你安装模块(包),自动安装依赖,管理包(增,删,更新,项目所有包)
类似:yarn
安装到全局环境
- 安装到电脑系统环境下
- 使用时在任何位置都可以使用
- 被全局安装的通常是:命令行工具,脚手架
npm i 包名 -g
安装
npm uni 包名 -g
卸载
安装到项目环境
只能在当前目录使用,需要使用npm代运行
初始化项目环境
npm init
初始化npm管理文件package.json
package-lock.json 文件用来固化依赖
{
"name": "npm", //项目名称
"version": "0.0.1", //版本
"description": "test and play", //描述
"main": "index.js", //入口文件
"dependencies": {
//项目依赖
上线也要用
"jquery": "^3.2.1"
},
"devDependencies": { //开发依赖 上线就不用
"animate.css": "^3.5.2"
},
"scripts": { //命令行
"test": "命令行",
},
"repository": { //仓库信息
"type": "git",
"url": "xx"
},
"keywords": [
//关键词
"test",'xx','oo'
],
"author": "kery",
"license": "ISC", //认证
"bugs": {
"url": "xx"//问题提交
},
"homepage": "xx"//首页
}
项目依赖
只能在当前项目下使用,上线了,也需要这个依赖 --save
//安装
npm i 包名 --save
| -S
npm install 包名 -S
npm install 包名@x.x.x -S
//卸载
npm uninstall 包名 --save | -S
npm uninstall 包名 -S
开发依赖
只能在当前项目下使用,上线了,依赖不需要了 --save-dev
npm install 包名 --save-dev
npm install 包名 -D
查看包
npm list
列出所有已装包
npm outdated 版本对比(安装过得包)
npm info 包名 查看当前包概要信息
npm view 包名 versions
查看包历史版本列表
npm outdated 版本对比(安装过得包)
主版本.子版本(偶数).修正版本
npm info 包名 查看当前包概要信息
安装所有依赖
npm install
安装package.json里面指定的所有包
选择源
npm install nrm -g
安装选择源的工具包
nrm ls 查看所有源
nrm use 切换源名
安装卡顿时
ctrl + c -> npm uninstall 包名
-> npm cache 清除缓存 -> 换4g网络 -> npm install 包名
YARN
官网
安装
去官网安装
注意:为省事,不要用npm i yarn -g,而去安装yarn的下载压缩包,保证注册表和环境变量的硬写入,后期通过yarn安装全局包时比较方便
使用
初始化一个新项目
yarn init
添加依赖包
yarn add [package]
yarn add [package]@[version]
将依赖项添加到不同依赖项类别中
分别添加到 dependencies
,devDependencies
中:
yarn add [package] --save
| -S
yarn add [package] --dev
| -D
升级依赖包
yarn upgrade [package]@[version]
移除依赖包
yarn remove [package]
安装项目的全部依赖
yarn
或者
yarn install
安装到全局
yarn global add [package]
//global的位置不能变
yarn global remove [package]
EXPRESS
nodejs库,不用基础做起,工作简单化,点击进入官网,类似的还有 koa
特点
基于 Node.js 平台,快速、开放、极简的 Web 开发框架
搭建web服务
let express=require('express')
let server=express()
let server.listen(端口,地址,回调)
静态资源托管
server.use(express.static('./www'));
use
安装中间件、路由、接受一个函数
server.use([地址],中间件|路由|函数体)
中间件
middleware, 处理自定义业务,只处理请求到结束响应的中间部分
举例 (例如使用body-parser,来去增强req的功能)
let bodyParser=require('body-parser')//引入中间件
server.use(bodyParser())//安装中间件
body-parser 使用方式,实时查询 npm,可获得最新
接口响应
支持各种请求姿势:get、post、put、delete…
server.请求姿势API(接口名称,处理函数)
server.get(url,(req,res,next)=>{})
server.post(url,(req,res,next)=>{})
...
req 请求体
request 对象表示 HTTP 请求,包含了请求查询字符串,参数,内容,HTTP 头部等属性
req.query //获取地址栏的数据
req.body //获取非地址栏的数据
依赖中间件
req.params //获取动态接口名
app.get("/api/:id")
req.method //获取前端提交方式
注意:req.body依赖中间件
中间件使用:body-parser
- let bodyParser = require(‘body-parser’)
- app.use(bodyParser ())
res 响应体
response 对象表示 HTTP 响应,即在接收到请求时向客户端发送的 HTTP 响应数据
res.send(any) //对等 res.write + res.end
res.end(string|buffer)
res.json(json) //返回json
res.status(404).send({error:1,msg:"Sorry can't find that!"}) //返回一个404
路由
告诉你去哪,对于前端,主要是导向告诉浏览器应该去哪。对于后端,可以理解为一个子服务,一个路由就是一个小的服务,处理一类接口
// 1. 创建路由
let userRouter = express.Router();
//2. 安装路由
app.use('地址',userRouter);
//2 路由处理响应
userRouter.响应API(地址, 处理函数)
Mongodb 数据库
mongodb
非关系型数据库,又叫nosql
-
下载 安装帮助
-
配置数据文件存储位置:
找到安装目录 D:web-softwaremongodatadb
data和db目录要手动创建
- 服务端启动:
找到安装目录> mongod --dbpath 路径 回车
- 客户端启动:
找到安装目录> mongo 回车
- 环境变量
为了在任意盘符下去都可以启动 mongod服务端|mongo客户端,把安装目录添加到环境变量
mysql vs mongodb
mysql | mongoDb | |
---|---|---|
database(库) | database(库) | 库没有区别 |
table(表) | collection(集合) | 表 vs 集合 |
row(一条数据) | document(文档) | 行记录 vs 文档 |
column(字段) | field(区域) | 字段 vs 区域 |
二维表,每次存到磁盘 | json,存在缓存,关闭时存到磁盘 | 存储方式 |
mongodb相关命令
常看所有的数据库 : show dbs
切换/创建数据库:use student
删除数据库: db.dropDatabase()
创建集合:db.createCollection('表名')
查看集合:db.getCollectionNames()
/
show collections
插入数据:db.user.insert({})
更新数据:db.user.update({条件},{$set:{age:25}},false,true)
查询数据: db.user.find({})
db.user.find({},{age:1,_id:0})
db.user.find({}).skip(3).limit(3)
排序:
db.user.find().sort({age:1})
mongodb命令行操作
库操作
查:
show dbs
db 查看当前库
建: use 库名
没有就创建,有就切换
删:
db.dropDatabase()
删除当前库
集合(表)操作
建:db.createCollection('集合名')
查:show collections / db.getCollectionNames()
删:db.集合.drop()
文档(row)操作
增
db.集合.insert({})
//添加一条
db.insertOne({}) //添加一条
db.集合.insert([{},{}]) //多条
删
db.集合.deleteOne({要删数据条件描述}) //一条
db.集合.remove({要删数据条件描述}) //多条
db.集合.remove({}) //清空表
改
db.集合.udpate({查询条件},{替换条件})
//将name为张三的年龄改为30
修改一条
db.studentInfo.update({name:"张三2"},{$set:{age:30}})
//修改多条数据
db.studentInfo.updateMany({name:"张三2"},{$set:{age:40}})
查
所有:db.集合.find(条件)
条数: db.集合.find().count()
db.集合.find({条件},{指定要显示列区域})
db.集合.find().limit(number)
//限定
db.集合.find().skip(number) //跳过
db.集合.findOne()//找第一个
db.集合.find().limit(1)
//查询第一条
指定要显示列区域
username:1 显示这个区域
username:0 不显示这个区域
_id 是默认显示
排
db.集合.find().sort({key:1,key2:-1}) //升
db.集合.find().sort({key:-1}) //降
node + mongoose
安装
npm install mongoose -S
最后
以上就是缥缈歌曲为你收集整理的node.jsNODEJS的全部内容,希望文章能够帮你解决node.jsNODEJS所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复