nodejs介绍下载
普通方式:
1.官网,下载并安装
2.打开cmd,运行node -v和npm -v
nvm安装:
1.vnm是nodejs版本管理工具,可以切换nodejs版本
2.mac os系统 ,使用brew install nvm(brew是苹果的软件管理工具)
3.windows系统 ,githup中搜索 vnm-windows,有下载地址
https://github.com/coreybutler/nvm-windows
4.nvm list 查看所有的node版本
5.nvm install v10.13.0 安装指定的版本
6.nvm use-delete-prefix 10.13.0 切换到指定的版本
总结:如果同时使用多个版本,建议使用vnm
必须安装好node,版本>=8.0
ECMAScript:
1、定义了语法,写js和nodejs都需要遵守
2、变量定义,循环,判断,函数
3、原型和原型链,作用域和闭包,异步
阮一峰老师的es6网站
4、不能操作DOM,不能监听事件,不能发送ajax请求
5、不能处理http请求,不能操作文件
6、只有es做不了任何实际的项目
JavaScript:
1、使用了es的语法规范+web API
2、DOM操作,BOM操作,事件绑定,Ajax等
3、两者结合,即可以完成浏览器端的操作
nodejs
1、使用了es语法规范+nodejs API
2、处理http,处理文件,地址http://nodejs.cn/api/
3、两者结合,即可完成server端的任何操作
总结:
es是语法规范
nodejs=es+nodejs API
js =es+js API
common.js 模块化规范
moudle.export()导出
require导入
node 文件运行
node init -y 初始化环境
loadash(工具库)
npm i loadsh --save
debugger
主文件入口:main.js
http:自有模块
初始化
npm init -y
创建主入口文件,例如index.js
代码流程:
引入http
创建服务
监听端口
const http = require('http');
const server = http.createServer((req, res) => {
res.writeHead('200', {
'content-type': 'text/html'
})
res.end('hello world
')
})
server.listen(3000, () => {
console.log('listening on 3000 port')
})
cmd 中执行node index.js
在浏览器地址栏中输入localhost:3000
server开发和前端开发
1、服务稳定性:恶意攻击,不能挂掉
2、考虑内存和cpu:客户端独占一个浏览器,内存和cpu;server端承载很多请求,cpu和内存都是稀缺资源;stream写日志,使用radis存储session
3、日志记录:前端是日志发起方;后端要记录日志,存储日志,分析日志
4、安全:越权操作,数据库攻击;验证预防xss攻击和sql入驻
5、集群和服务拆分:流量增加,通过扩展机器和服务拆分承载大流量
http概述
1.nodejs处理http请求
2.搭建开发环境
3.开发接口(暂不连接数据库,暂不考虑登录)
案例:
1.访问baidu
2.到network
dns解析:域名对应服务器,解析一个ip地址
Remote Address(远端地址): 61.135.169.121:443
443https的默认端口,http的默认端口是80
客户端找到ip地址之后会进行tcp连接,3次握手
1、客户端询问服务器是否可以使用
2、服务器告诉客户端可用
3、客户端再次告诉服务器可以访问
发送http请求
request 请求
response 响应
get请求和querystring
get请求,即客户端向server端获取数据
通过querystring来传递数据,如a.html?a=100&b=200
浏览器直接访问,就是发送get请求
const http = require('http');
const querystring = require('querystring');
const server = http.createServer((req, res) => {
console.log('method:' + req.method) //获取请求方式 GET
const url = req.url //获取请求的完整 url
console.log('url:', url)
req.query = querystring.parse(url.split('?')[1]); //解析querystring
console.log('query:', req.query)
res.end(JSON.stringify(req.query)); //将querystring返回
})
server.listen(8000)
post请求和post data
post请求,客户端要向服务端传递数据
通过post data传递数据
浏览器无法直接模拟,手动写js,或者使用postman
安装postman
安装方式:https://www.jianshu.com/p/17da8735866b
使用方式:
const http = require('http');
const server = http.createServer((req, res) => {
if (req.method === 'POST') {
// 数据格式
console.log('contnent-type:', req.headers['content-type'])
}
// 接受数据
let postData = ""
// 数据流的方式,chunk是传入的每一点数据
req.on('data', chunk => {
postData += chunk.toString()
})
// 接收完之后触发end事件
req.on('end', () => {
console.log(postData)
res.end('hello world') //在这里返回,因为是异步操作
})
})
server.listen(8000);
控制台中
路由
/内容就可以代表一个路由
const http = require('http');
const server = http.createServer((req, res) => {
const url = req.url
const path = url.split('?')[0]
res.end(path)//返回路由
})
server.listen(8000);
综合示例
const http = require('http');
const querystring = require('querystring');
const server = http.createServer((req, res) => {
// 请求方式
const method = req.method
// 请求地址
const url = req.url
// 路由
const path = url.split('?')[0]
// ?后面的内容
const query = querystring.parse(url.split('?')[1])
// 设置返回数据为json
res.setHeader('Content-type', 'application/json')
// 返回的数据
const resData = {
method,
url,
path,
query
}
// 返回
if (method === 'GET') {
res.end(
JSON.stringify(resData)
)
}
if (method === 'POST') {
let postData = ''
req.on('data', chunk => {
postData += chunk.toString()
})
req.on('end', () => {
// 将数据添加到结果中
resData.postData = postData
// 返回
res.end(
JSON.stringify(resData)
)
})
}
})
server.listen(8000)
console.log('ok')
get方式
post方式
搭建开发环境
从0开始,不使用框架
使用nodemon检测文件变化,自动重启node
使用cross-env设置环境变量,兼容mac linux 和windows
建立文件夹blog1
node版本要>=8
npm init -y初始化package.json
修改main主入口文件地址bin/www.js
在www.js文件中添加代码
const http = require('http');
const PORT = 8000
const serverHandle = require('../app')
const server = http.createServer(serverHandle)
server.listen(PORT)
创建app.js文件,添加代码
const serverHandle = (req, res) => {
// 设置返回格式
res.setHeader('Content-type', 'application/json');
const resData={
name:'zhang',
site:'imooc'
}
res.end(
JSON.stringify(resData)
)
}
module.exports = serverHandle
运行
node bin/www.js
停止运行,安装nodemon和cross-env
npm install nodemon cross-env --save-dev
在package.json文件的scripts中添加内容
意思是设置环境变量兼容不同系统 以及实时监测www.js文件
"dev": "cross-env NODE_ENV=dev nodemon ./bin/www.js"
运行
npm run dev
修改json数据监测nodemon是否正常使用
progress.env获取环境变量
const resData={
name:'zhang01',
site:'imooc',
// 获取环境变量
env:process.env.NODE_ENV
}
两个文件分离
www.js中是基础功能
app.js中是回调函数
开发接口
初始化路由
返回假数据