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>
    

      

  • 相关阅读:
    【百度搜索研发部】以求医为例谈搜索引擎排序算法的基础原理(转)
    TF-IDF与余弦相似性的应用(三):自动摘要
    TF-IDF与余弦相似性的应用(一):自动提取关键词
    TF-IDF与余弦相似性的应用(二):找出相似文章
    技术向:一文读懂卷积神经网络CNN(转)
    [透析] 卷积神经网络CNN究竟是怎样一步一步工作的?(转)
    像素间的基本关系-距离(转)
    Swift学习笔记-字符串和字符(Strings and Characters)-比较字符串 (Comparing Strings)
    Swift学习笔记-基本运算符(Basic Operators)-空合运算符(Nil Coalescing Operator)
    Swift学习笔记-基本运算符(Basic Operators)-求余运算符
  • 原文地址:https://www.cnblogs.com/SunlikeLWL/p/8681623.html
Copyright © 2011-2022 走看看