node_原理整理

node : js运行时环境

    浏览器js    ES+DOM+BOM

    node        ES+核心模块:创建服务器、fs文件操作模块【加分项】

node可以做什么事情?——流操作,ajax,express,buffer

    1   创建高性能的服务器————单线程

    2   工具

    3   中间件

    4   ??脚手架

    5   -跨越问题:node之间通信

        -命令行工具;浏览器渲染

=====================================================

全栈项目:主服务一般不用node;实际商业项目用:java\php

        -node往往用于搭建接口服务器

进程>线程:

    进程:表示一个程序。一个进程可以有多个线程。

    线程:JS可以有多个线程【异步任务】——同一时刻:主线程只有一个。

node:往往适用于 I/O密集,不适合CPU密集(压缩、合并、加迷、解密)

    -不稳定,大型项目不会使用!

global

node:

    setImmediate()

    setTimeout()

node本身的事件环

    eventLoop:跟版本不同 ; node<10以前,>10以后

//global常见的属性

Buffer      二进制数据

process     进程  process.nextTick()    cwd():当前根目录  env:环境 argv:

clearInterval()     clearTimeout    setInterval setTimeout

clearImmediate      setImmediate

==============================ES6模块化方案===========================

require js

    node            模块化         

    CommonJS        规范            es6 module

定义:

    模块:一个文件。模块之间相互独立。{

        -扩展性

        -模块协作

        -

    }

    导入模块: require(模块路径:相对路径);

    导出模块: module.exports;

node    es+核心模块

node模块分类:  1核心模块(内置模块)[fs\http...]        2自定义模块        3第三方模块

node --inspect-brk file.js

//require('./a')

1:把相对路径解析成绝对路径

2:读取该文件

3:让函数执行

http模块创建服务器

const http = require('http');

//创建服务器

const app = http.createServer();

//监听客户端请求

app.on('request', (req, res) => {

//响应

res.end('<h1>hi</h1>');

console.log(req);

console.log(req.url);

console.log(req.method);

console.log(req.headers);

});

app.listen(8888);

console.log('服务器已启动,请访问localhost:8888');

获取request请求:http://localhost:8888/?username=macro&pwd=123456

// http 创建服务器模块

const url = require('url');

const http = require('http');

//创建服务器

const app = http.createServer();

//监听客户端请求

app.on('request', (req, res) => {

//响应

// console.log(req.url);

let url1 = url.parse(req.url);

let { query } = url.parse(req.url, true);

res.end(`${query.username}-${query.pwd}`);

console.log(url.parse(req.url, true));

//res.end('welcome');

});

app.listen(8888);

console.log('服务器已启动,请访问localhost:8888');

querystring模块处理request

const qs = require('querystring');


app.on('request', (req, res) => {

//请求

let postData = ''; //由于浏览器分段传播

//监听参数传递事件

req.on('data', (chunk) => {

postData += chunk;

    });

// console.log(req.url);

// console.log(postData);

req.on('end', () => {

// username=admin&pwd=123456

console.log(postData);

let { username, pwd } = qs.parse(postData);

console.log(username, pwd);

    });

// res.end(username, pwd);

});

客户端

服务器端——处理数据和业务逻辑

客户端 ---请求--->  服务器端

    <-----响应-----   

服务器集群

ip地址/域名/

端口:区分服务

协议号://域名/资源

本地ip:127.0.0.1

本地域名:localhost

报文:请求和响应的过程中


响应状态码:

    200 ok

    404 not find

    500 服务器错误

    400 客户端请求有语法错误

    304 缓存错误

内容类型:

    text/html

    text/css

    text/javascript

    image/jpeg

    application/json

HTTP请求处理与响应处理

    请求参数

        get请求参数

            get请求:参数会放置在浏览器地址栏中  

                1:浏览器直接输入网址

                2:link

                3: script

                4: img {src}

                5: Form表单

        post请求

                1:参数是被放在请求体或者报文中进行传输

               2:node处理post请求需要使用data\end事件

                3:使用querystring模块

路由:【对应关系】客户端请求地址与服务器端程序代码地对应关系

//静态网站

静态资源:服务器不需要处理,可以直接相应给客户端(public)

    mime模块:解决不同网页类型,图片、text、等等

动态资源:相同地请求地址不同地响应资源

        .../blog/article?id=1

        .../blog/article?id=2

        .../blog/article?id=3


区别express得路由:

const http = require('http');

const url = require('url');

const app = http.createServer();

app.on('request', (req, res) => {

let { pathname } = url.parse(req.url);

res.writeHead(200, {

'Content-Type': 'text/html;charset=utf8'

    });

if (pathname === '/' || pathname === '/index') {

res.end(`欢迎访问首页`);

    } else if (pathname === '/about') {

res.end(`欢迎访问关于我们`);

    } else if (pathname === '/news') {

res.end(`欢迎访问新闻首页`);

    };

res.end(`404`);

});

app.listen(8888);

npm包分类:

    全局包: 命令行使用

        安装第三方: npm install *** --save -g

        自己创建全局包

    本地包: 项目中使用

        npm install jquery  //默认安装的是生产依赖

        生产依赖放在 “dependencies":{} 以后删除依赖可以通过 npm install 安装所有依赖

        开发依赖:"devDependencies"

        npm install @babel/core --save-dev(-D)

        npm install --production //安装所有生产依赖

        //

        其他依赖: 'peerDependecies':{}

                'bundledDependencies'

3 package.json

    npm init 初始化一个文件

    npm init -y 全部使用默认值

    npm uninstall *** -g

nodemon:

    1:每次源文件修改后,自动执行

    2:安装 npm i nodemon -g

    3: nodemon index

npm :  

nrm :npm registry manager  npm下载地址切换工具

nvm :node version manager

    npm i nrm -g

    nrm ls

    nrm use cnpm  //切换为淘宝源

    nrm current

package-lock.json   : 锁定包的版本

函数问题

function Fibonacci(num) {

if (num === 0) {

return 0;

            } else if (num === 1) {

return 1;

            } else {

return Fibonacci(num - 2) + Fibonacci(num - 1);

            }

        }

var num = parseInt(prompt("input the numb"));

var res = '';

for (var index = 0; index <= num; index++) {

res += Fibonacci(index) + ",";

        }

console.log(res);

posted @ 2020-06-04 17:13  小海_macro  阅读(161)  评论(0编辑  收藏  举报