node.js笔记

Node.js概述

  1. 什么是node.js
    node.js不是一种编程语言,是一个可以让js语言运行在服务器端的开发平台。(由Chrome浏览器的V8引擎作为基础开发的。)

  2. node.js有什么特性

    单线程:只有一条线程用来执行所有的任务

    事件驱动:通过“事件环”的机制来执行事件回调函数

    非阻塞I/O: 当有i/o操作时,会将i/o操作添加到事件队列中,执行下一个事件的计算,当i/o操作完成时,通过事件驱动再回到原任务上来,从而实现非阻塞。

  3. Node.js自身哲学,是花最少的硬件成本,追求最大的并发,更高的处理性能。
    没有语法:node.js不是一种独立的语言,它是使用js进行编程的。

V8引擎介绍

  1. v8引擎是谷歌公司开发的用于Chrome浏览器解析js代码使用的js引擎。
  2. v8引擎是使用C++语言开发出来的并且是开源的。

模块分类

  1. 核心模块,nodejs 自身拥有的功能模块(如:http、fs、path、util...)
  2. 文件模块(自己定义的文件,如xxx.js)
  3. 第三方模块(使用npm下载的第三方模块)
// 1.核心模块的引入
var http = require('http');
var fs = require('fs');
var path = require('path');
var util = require('util');

// 2.文件模块的引入
var util = require("./xxx.js"); // .js可以省略

// 3.第三方模块的引入
var express = require("express");

node全局对象/变量

  1. 在浏览器JavaScript 中,通常window是全局对象, 而Node.js中的全局对象是global,所有全局变量(除了 global 本身以外)都是global对象的属性。
  2. process 是一个全局变量,即 global 对象的属性。通常在你写本地命令行程序的时候使用。
  3. console 是一个全局变量,即 global 对象的属性。

http模块

var http = require('http');

http.createServer(function (req,res) {
    res.statusCode = 200;
    res.setHeader("Content-type","text/plain; charset=utf-8")
    res.end('Hello httpServer');
}).listen(3000,'127.0.0.1',function () {
    console.log('服务器已运行,请在浏览器打开127.0.0.1:3000/查看结果');
});

url模块

// 1. url模块
var url = require('url');           // 引入模块

url.parse(request.url);             // 将url字符串转换为一个对象

url.parse(request.url, true).query;// 将query属性对应的对象返回

url.format(obj);                    // 将对象转换为url字符串

url.href;       // 指整个路径  如URL 'https://example.org/abc/xyz?123'
url.protocol;   // 指协议
url.host;       // 指主机名,包含端口
url.hostname;   // 指主机名,不包含端口  如URL 'https://example.org:8888' 的 example.org
url.port;       // 指端口  如URL 'https://example.org:8888' 的 8888
url.pathname;   // 指路径名  如URL 'https://example.org/abc/xyz?123' 的 /abc/xyz
url.search;     // 指问号后面的 如URL 'https://example.org/abc/xyz?123' 的 123
url.hash;       // 指#号后面的内容  如URL 'https://example.org/foo#bar'的 bar
url.parse(req.url).pathname;        // 输入的路径名

使用 url.parse() 方法可以返回在浏览器中输入的url地址的对象,该对象包含http请求所有的数据,如下案例。

// 将一个url字符串转换为Url对象。Url对象里面包含url的所有信息
var object = url.parse("https://www.imooc.com/course/list");

object {
 protocol: 'https:',
 slashes: true,
 auth: null,
 host: 'www.imooc.com',
 port: null,
 hostname: 'www.imooc.com',
 hash: null,
 search: null,
 query: null,
 pathname: '/course/list',
 path: '/course/list',
 href: 'https://www.imooc.com/course/list' }

util模块

var http = require('http');
var url = require('url');
var util = require('util');

http.createServer(function (req,res) {
    res.statusCode = 200;
    res.setHeader("Content-type","text/plain; charset=utf-8")

    // util一般在测试的时候将url对象[Object]展开
    res.end(util.inspect(url.parse(req.url)));
}).listen(3000,'127.0.0.1',function () {
    console.log('服务器已运行,请在浏览器打开127.0.0.1:3000/查看结果');
});

通过 util.inspect() 方法可以将包含url中所有信息的对象展开,如下图所示

urlObject.png

fs模块

fs.readFile // 读取文件

fs.readdir // 读取目录下的所有文件,包括目录

stat.isDirectory // 判断是不是目录

fs.mkdir("./album/ccc"); // 创建一个目录


node.js中自带的包

  • http
// 引包
var http = require("http");         
// 创建一个服务
var server = http.createServer(function(req,res){
    // 
    if(request.url == "/fang"){
        fs.readFile('./test/fang.html', function(err,data){
            response.writeHead(200, {"Content-type" : "text/html;charset=utf-8"});
            response.end(data);
        });
    }
    // 设置响应头内容类型
    res.writeHead(200,{"Content-type":"text:html;charset=utf-8"});
    // 浏览器解析结束,没有菊花了
    res.end("Hello Wordl!!");
});
// 监听
server.listen(3000,"127.0.0.1");    
  • url
  • querystring

序列化为字符串(querystring.stringify),反序列化为对象(querystring.parse)

转义为看不懂的编码(querystring.escape),反转义为看得懂得文字(querystring.unescape)

1.常使用querystringparse 方法将字符串 反序列化为一个键值对的集合(对象)。

2.常使用querystringstringify 方法将url 中携带的参数序列化为字符串。

    if (request.url == "/post" && request.method.toLowerCase() == "post"){
        //  获取数据的方式都是这个步骤
        // 创建一个字符串用于存放chunk
        var allData = "";
      
        // 对请求进行监听,每次接受一小段数据,分出能力去做别的事情,避免阻塞整个进程
        request.addListener("data", function (chunk) {
            allData += chunk;
        });
      
        // 接收数据结束
        request.addListener("end", function () {
            //console.log(allData.toString()); //allData本来就是加密后的字符串,toString方法没有用
            var obj = querystring.parse(allData);   // ********obj不继承自Object,只是一个集合
            console.log(obj);
            console.log(obj.name);
            console.log(obj.age);
            console.log(obj.sex);
            console.log(querystring.stringify(obj)); //*************
            response.end('success');
        });

    }
  • path
// 路径的扩展名
var extendName = path.extname(pathname);  // 输入的pathname点后面的扩展名
  • fs
fs.stat("./album/ccc", function (err, stats) {
    // 检查path是不是一个目录
    console.log(stats.isDirectory());
});

node.js中的回调函数

node中的函数大多都是通过回调调用函数的,所以在使用时要注意先确定数据拿到后再调用回到函数。要注意node非阻塞的特性。

node.js中的输出与使用

// 1.输出
// 在文件a.js中定义好方法,如果想外面的模块可以使用该方法,就需要将该方法暴露出去。
exports.methodName = function(){
  
}

// 2.引用
// 外面的模块想使用a.js文件中的函数,就要引用a.js文件
var a = require('./a.js');  // 引入。相对自身找到其他的文件
a.methodName();             // 使用方法


// 3.输出的第二种方法
// 直接将对象输出
module.exports = {
    "key1": "value1",
    "key2": "value2",
    "key3": "value3",
    "key4": "value4"
}

cookie

什么是cookie?

cookie是发送请求时一起和请求报文发送到服务器的字符串

cookie的作用?

可以根据cookie记录用户的喜好和登陆状态等

结束小菊花

  • express中使用res.send("提示");
  • 原生node.js使用res.end("提示");

作用域注意事项:

  1. 在浏览器中,顶层作用域就是全局作用域。这意味着在浏览器中,var something 会定义一个新的全局变量。在Node.js 中则不同,顶层作用域不是全局作用域,var something 的作用域只在模块内。

npm 包(常用-------------------

formidable

  • 上传文件时使用的包

ejs与jade

  • 使用模板引擎时引入的包

body-parser

  • 发送get请求时不需要该包
  • 发送post请求时需要用该包获取response.body对象

express

  • express相当于JavaScript与jquery的关系中的jquery

underscore

  • 可以使用template功能填充模板数据

    // 使用步骤
    // 1.下载underscore.js文件
    // 2.引入underscore.js文件
    // 3.设置模块
    // 4.从服务中获取json数据,将数据填充到模板中
    

mongooses

  • 数据库的建模工具模块,可以建立存在数据库里面的模板样式

moment

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,667评论 5 472
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,361评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,700评论 0 333
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,027评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,988评论 5 361
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,230评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,705评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,366评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,496评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,405评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,453评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,126评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,725评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,803评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,015评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,514评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,111评论 2 341

推荐阅读更多精彩内容

  • 个人入门学习用笔记、不过多作为参考依据。如有错误欢迎斧正 目录 简书好像不支持锚点、复制搜索(反正也是写给我自己看...
    kirito_song阅读 2,439评论 1 37
  • node.js介绍 简单的说node.js就是运行在服务器端的JavaScript。 node.js是一个基于Ch...
    清心挽风阅读 491评论 0 2
  • https://github.com/nswbmw/N-blog/tree/master/book 启动服务 mo...
    梁同桌阅读 285评论 0 0
  • https://nodejs.org/api/documentation.html 工具模块 Assert 测试 ...
    KeKeMars阅读 6,294评论 0 6
  • 119软妹币~江浙沪包邮! 码数34-39。冬季棉靴 跟高:5cm 面料:优质超迁+真毛 内里加绒 加绒鞋垫 !
    安乐家阅读 153评论 0 0