node.js笔记

一、什么是node.js

1、node.js

1.Node.js 就是运行在服务端的 JavaScript
2.Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台。
3.Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎,V8引擎执行Javascript的速度非常快,性能非常好。

2、node的特点

1.异步I/O
```  
    $.post('url',,{title:'学习node的笔记'},function(data){
        console.log('收到相应')
    })
    console.log('发送Ajax结束')
```
2.事件与回调函数
3.单线程
4.跨平台

node.js创建第一个应用

可以直接在命令行(黑窗口)运行.js文件(不推荐使用)
最优选择:新建.js 文件

1.引入require模块
    var http = require('http');// const http = require('http');
2.创建服务,服务器可以监听客户端的请求
    var server = http.createServer(function(req, res) {
        console.log('111');
    });
3.监听请求
    server.listen(8081);

二、npm

npm由三部分组成
1.网站
2.注册库(registry)
3.命令行工具(CLI)
+ 网站是开发者使用npm的最基本方法,包括发现/查找package,编写说明,管理他们的npm各个方面。
+ 注册库(registry)是一个关于package信息的一个巨大的库。
+ CLI 通过命令行或者终端,这是开发者通过CLI与npm打交道的途径。

实例——找到一个package

例如,假设你想为你的应用找一个条形码(二维码),预期花费数周时间来设计和实现,还不如去看下是否有人已经上传了一个二维码的package。
1.从搜索框输入值开始
2.相关选项将出现
3.或者点击,去过滤更多的有可能的
4.当你选择一个package去探索,更多的信息会展示出来,这些信息是package的作者写的,很详细。
5.现在你可以浏览开发者文档,去学习如何使用这些package。

三、文件系统 fs

readFile('文件名',function(err,data){})
writeFile('文件名','新增内容',function(err,data){})

同步和异步

// 异步读取
fs.readFile('1.input.txt', function (err, data) {
   if (err) {
       return console.error(err);
   }
   console.log("异步读取: " + data);
});
// 同步读取
var data = fs.readFileSync('1.txt');
console.log("同步读取: " + data.toString());

常用的语法
fs.open(path, flags[, mode], callback)
参数:路径,打开文件的行为(只读、读写等),文件的模式,回调
fs.open(path, flags[, mode], callback)
fs.close(fd, callback) // fd 通过 fs.open() 方法返回的文件描述符

四、get post

get 在url中 数据跟在url后边的
post 不在url中 数据单独发的

GET 数据解析
    1、自己切
    2.querystring   xxx=xx&xx=xx
    3.urlLib        aa?xxx=xx&xx=12
        urlLib.parse(url,true) pathname/query
url
    const urlLib = require('url')
    var obj = urlLib.parse('http://www.bufanui.com/index?a=2&b=5',true) //加上true 自动将query解析成json
    console.log(obj);
    Url {
        protocol: 'http:',
        slashes: true,
        auth: null,
        host: 'www.bufanui.com',
        port: null,
        hostname: 'www.bufanui.com',
        hash: null,
        search: '?a=2&b=5',
        query: 'a=2&b=5',
        pathname: '/index',
        path: '/index?a=2&b=5',
        href: 'http://www.bufanui.com/index?a=2&b=5' }
querystring
    const querystring = require('querystring')
    var json = querystring.parse("user=shi&pass=shi")
    console.log(json);//{ user: 'shi', pass: 'shi' }
post
    数据量大,url集中在内容
    分段发送

五、模块化

1、系统模块:http/querystring/url
2、自定义模块:
3、包管理器(npm)

系统模块:
    断言:Assert
    Buffer
    c/c++ 扩展
    Crypto 加密
    Path  处理文件路径
    Stream 流操作
    。。。
自定义模块
    1.模块的组成
        require 请求,引入其他模块的 (系统模块、自定义模块)
        modules 模块,批量对外输出
        exports 输出,对外输出
    2.npm (NodeJS Package Manager) 包管理器
        1.统一下载途径
        2.自动下载依赖
        3.node_modules 存放依赖
            (   如果有./  从当前目录找
                如果不加./  先从系统模块找,再从node_modules找 )
        自定义的模块,统一放在node_modules中
    3.如何发布自己的模块
        创建一个新的文件夹,npm init 
        编写包的逻辑
        npm publish,上传成功,npm --force unpublish (取消发布)
    注意:引入自己的模块,路径加./
          对外输出内容 ,必须加exports
          js 可加可不加

六、express框架

简洁而灵活的 node.js Web应用框架
1.安装
npm install express --save
2.配置
3.接受请求 get/post/use
4.响应数据

非侵入式(增强式)
    req req.url
    res
        原生  res.write()
        express res.send() // 功能更多
优势:express 保留了原生的功能,添加了一些方法,增强原有的功能
使用三部曲:
1.创建服务 var server = express()
2.监听 server.listen()
3.处理请求 server.use('地址',function(req,res){})
    处理请求三种方式:
    get('/',function(req,res){})
    post()
    use() 融合两种请求
中间件 (使用、写、链式)
    eg:express-static  //设置静态文件路径
        const static = require('express-static')
        server.use(static('/'))
    自己写
        server.use(function(req,res,next(){
             var str = ''
            req.on('data',function(){
                str += data
            })
            req.on('end',function(){
                req.body = querystring.parse(str);
                next()
            })
        }))
处理数据
    GET 无需中间件
        req.query
    POST 需要 body-parser
        server.use(bodyParser.unlencode({})) //用于处理 JSON, Raw, Text 和 URL 编码的数据
        server.use(function(){
            req.body
        })
    server.use(function(req,res,next(){
        req.body
    }))
链式操作
    next() 下一个步骤

七、cookie

cookie
存在浏览器中 保存一些数据,每次请求都会带过来
不安全、有限(4K)
签名、加密
session
保存数据,保存在服务端
安全、足够大
不能独立存在、基于cookie实现的
cookie 中会有一个session的id、服务器利用session找到session文件、读取写入
隐患:session劫持

cookie 
    1、读取  cookie-parser
        server.use(cookieParser("相同的签名 "))
        server.use(function(){
            req.cookies  ==>未签名的cookie
            req.signedCookies  签名
        })
    2、发送   response响应回去的
        res.secret = ''
        res.cookie('名字','值',{
            path:'/aaa', // 向上继承
            maxAge:30*24, // 毫秒
            signed:ture // 是否签名  签名的密钥
        })
    3、删除
        res.clearCookie('名字')
    4、cookie-encrypter 加密
session 
    cookie-session
    server.use(cookieParser())
    server.use(cookieSession({
        keys:['12','sss'],// 密钥
        maxAge: 3600*1000, // 毫秒
    }))
    server.use('/',function(){
        req.session
    })
    delete res.session
    1、写入
    2、读取

八、模板引擎 (渲染页面)

    jade -破坏式、强依赖  不保持原来html
        render('字符串)
        renderFile('文件名',参数)

        根据锁进,规定层级
        属性放在(),逗号分隔 
            style = {}
            class = []
        内容 空格 依次  
            | 原样输出
            . 所有的下一级 原样输出
            include a.js
            # {a+b }  输出内容
            - var a = 5 / for
            !标签正常输出
    ejs -非侵入式 保留式
        <%=  name  %>
        <%=  12+5  %>
        <%=  'fefefe'  %>
        <%=  json.arr[0].name  %>

你可能感兴趣的:(node.js笔记)