zoukankan      html  css  js  c++  java
  • 文档笔记----nodejs菜鸟教程

    <html>
    
    <head>
        <meta charset="utf-8">
        <title>文档笔记----nodejs菜鸟教程</title>
        <meta name="keyword" content="文档笔记----nodejs菜鸟教程">
        <meta name="discription" content="文档笔记----nodejs菜鸟教程">
    </head>
    
    <body>
        <script>
        文档笔记-- --nodejs菜鸟教程
    
        第一章 创建第一个应用
        如果我们使用PHP来编写后端代码是时, 需要Apache或者Nginx服务器, 并且配上mod_php5模块和php_cgi.
        使用nodejs时, 我们不仅仅在实现一个应用, 同时还实现了整个HTTP服务器.事实上, 我们的Web应用以及对应的web服务器基本是一样的
    
        1 引入require模块: 用来载入node.js模块
        var http = require("http");
        2 创建服务器: 服务器可以监听客户端的需求, 类似Apache / Nginx等HTTP服务器
        3 接受请求与响应请求 拂去其端可以使用浏览器或者终端发送HTTP请求, 服务器接受请求后返回相应数据.
        http.createServer(function(request, response) {
            //内容类型
            response.writeHead(200, { "Content-Type": "text/plain" });
            //发送响应式请求
            response.end("Hello World
    ");
        }).listen(8888);
    
        第二章 NPM使用
        NPM是随同Nodejs一起安装的包管理工具, 能解决Nodejs代码部署上的很多问题, 常见的使用场景有以下几种:
            1 允许用户从NPM服务器下载被别人编写的三方包到本地使用
        2 允许用户从NPM服务器下载并安装别人编写的命令程序到本地使用
        3 允许用户将自己编写的包或者命令程序上传到NPM服务器供别人使用
    
        查看版本
        npm - v
    
        全局安装npm
        npm install npm - g
    
        安装express到本地
        npm install express
    
        卸载express
        npm uninstall express
    
        查看安装路径
        npm ls
    
        更新express模块
        npm update express
    
        创建模块
        npm init
    
    
        第三章 Node.js REPL(交互式解释器)
    
        Node自带交互式解释器, 可以至此那个一下任务:
            1 读取 - 读取用户输入, 解析输入的javascript数据结构并且存储在内存中
        2 执行 - 执行输入的数据结构
        3 打印 - 输出结构
        4 循环 - 循环操作以上步骤直到用户量词按下ctrl + c按钮退出
    
        下划线(_) 变量
            -- > 获取表达式运算结果
    
        ctrl + c 退出当前终端
        ctrl + c按两次 退出Node REPL
        ctrl + d退出Node REPL
        向上 / 向下方向键 - 查看历史命令
        tab键 列出当前命令
        help 列出使用命令
        clear 退出多行表达式
        save filename 保存当前的Node REPL 会话到指定文件
        load filename 载入当前Node REPL会话的文件内容
    
    
        第四章 Node.js 回调函数
    
        Node.js异步编程的直接提现说就是回调函数
    
        异步编程依托于回调函数, 但不能说使用了回调函数就能是异步编程
    
        阻塞代码实例:
            var fs = require("file");
        var data = fs.readFileSync("input.txt");
        console.log(data.toString());
        console.log("程序执行结束");
    
    
        非阻塞代码实例:
            var fs = require("file");
        fs.readFile("input.txt", function(err, data) {
            if (err) {
                return console.error(err);
            } else {
                console.log(data.toStrign());
            }
        })
    
        console.log("程序执行结束");
    
    
        第五章 Node.js EventEmitter
        Node.js所有的异步I / O操作在完成是都会发送到事件队列
        events只提供了events.EventEmitter 这一个对象
        核心就是事件触发与事件监听功能的封装
    
        //引入events模块
        var events = require("event");
        //创建eventsEmitter对象
        var eventEmitter = new events.EventEmitter();
        //绑定事件
        event.on("some_event", function() {
            console.log("some_event触发");
        })
        //触发事件
        event.emit("some_event");
    
        第六章 Buffer(缓冲区)
        javascript语言自身只有字符串数据类型, 没用二进制数据类型
    
        但在处理像TCP流或者文件流时, 必须使用到二进制数据.因此在Node.js中, 定义了一个Buffer类,
            该类用来创建一个专门存放二进制数据的缓存区
    
        一个Buffer类似一个整数数组, 但他对应于V8堆内存之外的一块原始内容
    
        var buf = new Buffer(10) //按长度创建
    
        var buf = new Buffer([10, 20, 30, 40, 50]) //按给定的数组创建
    
        var buf = new Buffer("www.runob.com", "utf-8"); //通过一个字符串创建
    
        写入缓冲区
        buf.write() //返回字节数
    
        从缓冲区读数据
        buf.toString() //返回数据字符串
    
        转为JSON对象
        buf.toJSON();
    
        合并缓冲区
        buffer.concat(buf1, buf2, ..); //
    
        缓冲区比较
        buf1.compare(buf2); //
    
        缓冲区裁剪
        buf.slice();
    
        缓冲区长度
        buf.length
    
        第七章 Node.js Stream(流)
    
        Stram是一个抽象接口, Node中有很多对象实现了这个接口.例如, 对http服务器发起的request对象就是一个Stream, 还有stdout(标准输出)
        分类:
            1 readable 可读操作
        2 writable 可写操作
        3 duplex 可读可写操作
        4 transform 操作别写入数据, 然后读出结果
    
        所有的Stream对象都是EventEmitter对象
        data: 当有数据可读时触发
        end: 没有更多的数据可读时触发
        error: 在接收和写入过程中发生错误时触发
        finish: 所有数据已被写入到底层系统时触发
    
    
        从流中读取数据
        var fs = require("file");
        var data = '';
        //创建可读流
        var readerStream = fs.createReadStream("input.txt");
        //设置编码
        readerStream.setEncoding("UTF8");
        //处理流事件
        readerStream.on("data", function(chunk) {
            data += chunk;
        })
    
        readerStream.on("end"function() {
            console.log(data);
        })
    
        readerStream.on("error", function(err) {
            console.log(err.stack);
        })
        console.log("程序执行完毕");
    
        写入流
        var fs = require("file");
        var data = "324324324";
    
        var writerStream = fs.createWriteStream("output.txt");
    
        writerStream.write(data, "UTF8");
    
        writerStream.end();
    
        writerStream.on("finish", function() {
            console.log("写入完成");
        })
        writerStream.on("error", function(err) {
            console.log(err.stack);
        })
    
        console.log("程序执行完毕");
    
        第八章 Node.js函数
    
        匿名函数: 我们可以把一个函数作为变量传递.但是我们不一定要绕这个 "先定义,再传递"
        的圈子,
        我们可以直接在另一个函数的括号中定义和传递这个函数
        execute(function(word) {
            console.log(word);
        })
    
        第九章 Node.js模块系统
    
        为了让Node.js的文件可以相互调用, Node.js提供了一个简单的模块系统.
        模块是Node.js应用程序的基本组成部分, 文件和模块是一一对应的.换言之, 一个Node.js文件就是一个模块
    
        //func.js
        experts.func = function() {
    
        }
    
        module.experts = function() {
    
        }
    
        var f = require("func");
    
        //引入的时候前者 f.func();后者 f();
        模块加载优先级
    
        开始require - > 是否在文件模块缓存区中 - > 否 - > 是否原生模块 - > 否 - > 查找文件模块 - > 根据扩展名载入文件模块 - > 返回experts
        是 - > 返回experts -
            >
            是 - > 是否在原生模块缓存区中 - > 否 - > 加载原生模块 - > 缓存原生模块 - > 返回experts
    
    
    
        第十章 GET / POST
    
        GET:
            var url = require("url");
    
        POST:
            var querystring = require("querystring");
    
        第十二章 Node.js常用工具
        util是一个Node.js核心模块, 提供常用函数的集合, 用于弥补核心javascript的功能过于精简的不足
        util.inherits() 是一个实现对象间原型继承的函数.
        var util = require("util");
    
        function Base() {
    
        }
        Base.prototype.showName = function() {
    
        }
    
        util.inherits(Sub, Base);
        var sub = new Sub();
    
        //Sub仅仅继承了Base在原型中定义的函数,而构造函数内部的属性和函数都咩有被Sub继承
    
        util.inspect();
        //将任意对象转为字符串的方法
    
        util.isArray()
        //判断传入对象是否为数组
    
        util.isRegExp()
        //判断传入参数是否为正则
    
        util.isDate()
        //判断传入参数是否为日期
    
        util.isError();
        //判断是否为一个错误的对象
    
    
        第十三章 Node.js工具模块
    
        OS模块
        Path模块
        Net模块
        DNS模块
        Domain模块
    
    
        第十四章 Node.js路由
    
        路由可以通过请求的URL路径来区别不同请求, 这是通过路由讲请求以url路径为基准映射到处理程序上
    
    
        第十五章 Node.js全局对象
        javacript中有一个特殊的对象, 它及其所有属性都可以在程序的任何地方访问
        最外层定义的变量
        全局随想的属性
        隐式定义的变量
    
        __filename
        __dirname
    
        setTimeout();
        clearTimeout();
        serInterval();
        clearInterval();
    
        console
    
        process
        //用于描述当前Node.js进程状态对象,提供了一个与操作系统的简单接口
    
    
        第十六章 Node.js文件系统
    
        //异步读取文件
        readFile(); //异步
    
        //同步读取文件
        readFileSync(); //同步
        建议使用异步, 比起同步, 异步方法性能更高, 而且没有阻塞
    
        var fs = require("fs");
    
    
        fs.readFile("input.txt", function(err, data) {
            if (err) {
                console.error(err.stack);
            } else {
                console.log(data.toString());
            }
        })
    
        var data = fs.readFileSync("input.txt");
        console.log(data.toString());
    
    
        fs.open("input.txt", function(err, fd) {
    
        })
    
    
        fs.read(fd, buf, 0, buf.length, 0, function(err, bytes) {
    
        })
        stats
    
        //异步写入文件
        fs.writeFile("input.txt", "xiruneirong", function(err) {
    
        })
    
        //关闭文件
        fs.close();
    
        //截取文件
        fsftruncate(fd, 10, function(err) {
    
        })
    
        //删除文件
        fs.unlink("input.txt", function(err) {
    
        })
    
        //创建目录
        fs.mkdir("dir", function(err) {
    
        })
    
        //读取目录
        fs.readdir(dir, function(err, files) {
            if (err) {
                return console.error(err);
            }
            files.forEach(function(file) {
                console.log(file);
            })
        })
    
        //删除目录
        fs.rmdir(dir, function() {
    
        })
    
        第十七章 Nodejs Express 框架
    
        快速打算建一个完整的网站
        Express框架核心特点:
            1 可以设置中间件来响应http请求
        2 定义了路由变用于执行不同的HTTP请求
        3 可以通过向模板传递参数来动态渲染HTML页面
    
    
        var express = require("express");
        var app = express();
        app.get("/", function(req, res) {
            res.send();
        })
        app.post('/', function(req, res) {
            console.log("主页 POST 请求");
            res.send('Hello POST');
        }) // /del_user 页面响应
        var server app.listen(8888, function() {
    
        })
    
        Request 对象 - request 对象表示 HTTP 请求, 包含了请求查询字符串, 参数, 内容, HTTP 头部等属性。 常见属性有:
        req.app: //当callback为外部文件时, 用req.app访问express的实例
        req.baseUrl: 获取路由当前安装的URL路径
        req.body / req.cookies: 获得「 请求主体」 / Cookies
        req.fresh / req.stale: 判断请求是否还「 新鲜」
        req.hostname / req.ip: 获取主机名和IP地址
        req.originalUrl: 获取原始请求URL
        req.params: 获取路由的parameters
        req.path: 获取请求路径
        req.protocol: 获取协议类型
        req.query: 获取URL的查询参数串
        req.route: 获取当前匹配的路由
        req.subdomains: 获取子域名
        req.accepts(): 检查可接受的请求的文档类型
        req.acceptsCharsets / req.acceptsEncodings / req.acceptsLanguages: 返回指定字符集的第一个可接受字符编码
        req.get(): 获取指定的HTTP请求头
        req.is(): 判断请求头Content - Type的MIME类型
        Response 对象 - response 对象表示 HTTP 响应, 即在接收到请求时向客户端发送的 HTTP 响应数据。 常见属性有:
        res.app: 同req.app一样
        res.append(): 追加指定HTTP头
        res.set() 在res.append() 后将重置之前设置的头
        res.cookie(name, value[,option]): 设置Cookie
        opition: domain / expires / httpOnly / maxAge / path / secure / signed
        res.clearCookie(): 清除Cookie
        res.download(): 传送指定路径的文件
        res.get(): 返回指定的HTTP头
        res.json(): 传送JSON响应
        res.jsonp(): 传送JSONP响应
        res.location(): 只设置响应的Location HTTP头, 不设置状态码或者close response
        res.redirect(): 设置响应的Location HTTP头, 并且设置状态码302
        res.send(): 传送HTTP响应
        res.sendFile(path[,options][,fn]): 传送指定路径的文件 - 会自动根据文件extension设定Content - Type
        res.set(): 设置HTTP头, 传入object可以一次设置多个头
        res.status(): 设置HTTP状态码
        res.type(): 设置Content - Type的MIME类型
    
    
    
        第十八章 RESFUL API
    
        表述性状态传递
    
    
    
        第十二章 多进程
        nodejs是单线程的模式运行, 事件驱动处理并发,
        这样有助于我们在多核cpu的系统上创建多个子进程, 从而提高性能
    
        const fs = require("fs");
        const child_process = require("child_process");
        for (var i = 0; i < 3; i++) {
            var worker_process = child_process.fork("support.js".[i]);
            worker_process.on("close", function(code) {
    
            })
    
            第二十一章 mysql
            var mysql = require("mysql");
            var connection = mysql.createConnection({
                host: "127.0.0.1",
                user: "root",
                password: "",
                database: "test"
            })
            connection.query("select....", function(err, res, fields) {
    
            })
        }
    
        第二十二章 MongoDB
        var MongoClient = require('mongodb').MongoClient;
        var DB_CONN_STR = 'mongodb://127.0.0:27017/test';
        var insertData = function(db, callback) { //连接到表 site var collection = db.collection('site'); //插入数据 
            var data = [{ "name": "1221", "url": "www.hao123.com" },
                { "name": "32132", "url": "c.baidu.com" }
            ];
            collection.insert(data, function(err, result) {
                if (err) {
                    console.log('Error:' + err);
                    return;
                }
                callback(result);
            });
        }
        MongoClient.connect(DB_CONN_STR, function(err, db) {
            console.log("连接成功!");
            insertData(db, function(result) {
                console.log(result);
                db.close();
            });
        });
        </script>
    </body>
    
    </html>
    

      

  • 相关阅读:
    LeetCode 230. 二叉搜索树中第K小的元素(Kth Smallest Element in a BST)
    LeetCode 216. 组合总和 III(Combination Sum III)
    LeetCode 179. 最大数(Largest Number)
    LeetCode 199. 二叉树的右视图(Binary Tree Right Side View)
    LeetCode 114. 二叉树展开为链表(Flatten Binary Tree to Linked List)
    LeetCode 106. 从中序与后序遍历序列构造二叉树(Construct Binary Tree from Inorder and Postorder Traversal)
    指针变量、普通变量、内存和地址的全面对比
    MiZ702学习笔记8——让MiZ702变身PC的方法
    你可能不知道的,定义,声明,初始化
    原创zynq文章整理(MiZ702教程+例程)
  • 原文地址:https://www.cnblogs.com/SunlikeLWL/p/8681623.html
Copyright © 2011-2022 走看看