第二门node

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

图片.png

图片.png

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

图片.png

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)
图片.png

图片.png

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);
图片.png

控制台中


图片.png

路由

/内容就可以代表一个路由

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);
图片.png

综合示例

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方式


图片.png

post方式


图片.png

搭建开发环境

从0开始,不使用框架
使用nodemon检测文件变化,自动重启node
使用cross-env设置环境变量,兼容mac linux 和windows

建立文件夹blog1
node版本要>=8
npm init -y初始化package.json
修改main主入口文件地址bin/www.js

图片.png

在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"
图片.png

运行

npm run dev
图片.png

修改json数据监测nodemon是否正常使用
progress.env获取环境变量

  const resData={
        name:'zhang01',
        site:'imooc',
        // 获取环境变量
        env:process.env.NODE_ENV
    }
图片.png

图片.png

两个文件分离
www.js中是基础功能
app.js中是回调函数

开发接口

初始化路由
返回假数据

你可能感兴趣的:(第二门node)