美文网首页
nodejs学习

nodejs学习

作者: 喵呜Yuri | 来源:发表于2018-11-21 10:46 被阅读7次

    打算学之前被朋友推荐看了《了不起的nodejs》,看到60多页看不下去了,基础和原理讲的很细,我觉得对初期学习不是很有利,好比我想学习“大象”是何物,这本书先开始将大象是如何让进化而来,始祖是哪种动物,画了一只大象简图“hello world!”。接着从大象的鼻子开始讲起,鼻子什么样,鼻子是由什么构成的,它用来干什么。。。看到眼睛我看不太下去了,因为我始终看不到活灵活现的大象,我还是不知道大象是什么,我停在了那句“hello world!”
    不怪作者,我脑路太扩散。此时我希望来部大象主题的记录片我就会立马懂了大体什么样。《了不起的nodejs》应该后期再钻研才对
    这里我只当给自己的笔记
    开始:

    Node.js 文件系统

    读取文件内容的函数有异步的 fs.readFile() 和同步的 fs.readFileSync()。建议大家使用异步方法,比起同步,异步方法性能更高,速度更快,而且没有阻塞。
    var fs = require("fs");
    有很多用法,如何打开文件,读写文件,删除文件,打开目录,读取文件字符。。。

    Node.js 常用工具

    var util = require('util');
    util.inherits(Sub, Base); 对象syb继承Base对象方法
    util.inspect(obj);将任意对象转换 为字符串的方法
    util.isArray(object);是一个数组返回true,否则返回false。
    util.isDate(object); "object" 是一个日期返回true,否则返回false。
    ......

    EventEmitter 类

    var events = require('events'); 
    var emitter = new events.EventEmitter(); 
    emitter.on('someEvent', function(arg1, arg2) { 
        console.log('listener1', arg1, arg2); 
    }); 
    emitter.on('someEvent', function(arg1, arg2) { 
        console.log('listener2', arg1, arg2); 
    }); 
    emitter.emit('someEvent', 'arg1 参数', 'arg2 参数'); 
    

    用on注册了两个两个事件监听器,emit触发了 someEvent 事件
    还有其他listenerCount等方法

    querystring

    querystring从字面上的意思就是查询字符串,一般是对http请求所带的数据进行解析。querystring模块只提供4个方法,在我看来,这4个方法是相对应的。

    这4个方法分别是querystring.parse和querystring.stringify,querystring.escape和querystring.unescape。

    querystring.parse("name=whitemu#sex=man#sex=women","#",null,{maxKeys:2});
    return:
    { name: 'whitemu', sex: 'man' }
    
    querystring.stringify({name: 'whitemu', sex: [ 'man', 'women' ] });
    'name=whitemu&sex=man&sex=women'
    
    

    url.parse

    url一共提供了三个方法,分别是url.parse();  url.format();  url.resolve();
    parse这个方法可以将一个url的字符串解析并返回一个url的对象

    url.parse("http://user:pass@host.com:8080/p/a/t/h?query=string#hash");
    
     返回值:
     {
    protocol: 'http:',
      slashes: true,
      auth: 'user:pass',
     host: 'host.com:8080',
     port: '8080',
     hostname: 'host.com',
     hash: '#hash',
    search: '?query=string',
     query: 'query=string',
     pathname: '/p/a/t/h',
     path: '/p/a/t/h?query=string',
     href: 'http://user:pass@host.com:8080/p/a/t/h?query=string#hash'
    }
     url.format()与之相反
    

    req的方法

    nodejs用req.on('data',fn)接收客户端的数据;
    nodejs用req.on('end',fn)结束响应,告诉客户端所有消息已经发送。当所有要返回的内容发送完毕时,该函数必须被调用一次。
    如何不调用该函数,客户端将永远处于等待状态。

    Node.js GET/POST请求

    这个例子就可以,有些语句不懂的上文有解释


    image.png
    var http = require('http');
    var querystring = require('querystring');
     
    var postHTML = 
      '<html><head><meta charset="utf-8"><title>菜鸟教程 Node.js 实例</title></head>' +
      '<body>' +
      '<form method="post">' +
      '网站名: <input name="name"><br>' +
      '网站 URL: <input name="url"><br>' +
      '<input type="submit">' +
      '</form>' +
      '</body></html>';
     
    http.createServer(function (req, res) {
      var body = "";
      req.on('data', function (chunk) {
        body += chunk;
      });
      req.on('end', function () {
        // 解析参数
        body = querystring.parse(body);
        // 设置响应头部信息及编码
        res.writeHead(200, {'Content-Type': 'text/html; charset=utf8'});
     
        if(body.name && body.url) { // 输出提交的数据
            res.write("网站名:" + body.name);
            res.write("<br>");
            res.write("网站 URL:" + body.url);
        } else {  // 输出表单
            res.write(postHTML);
        }
        res.end();
      });
    }).listen(3000);
    

    开始express框架的学习

    这四句搞进去!
    body-parser - node.js 中间件,用于处理 JSON, Raw, Text 和 URL 编码的数据。
    cookie-parser - 这就是一个解析Cookie的工具。通过req.cookies可以取到传过来的cookie,并把它们转成对象。
    multer - node.js 中间件,用于处理 enctype="multipart/form-data"(设置表单的MIME编码)的表单数据。

    npm install express --save npm install body-parser --save
    npm install cookie-parser --save npm install multer --save

    bodyParser

    app.use(bodyParser.urlencoded({ extended: false }));
    顾名思义,bodyParser.json是用来解析json数据格式的。bodyParser.urlencoded则是用来解析我们通常的form表单提交的数据,也就是请求头中包含这样的信息: Content-Type: application/x-www-form-urlencoded
    urlencoded解析body中的urlencoded字符, 只支持utf-8的编码的字符,也支持自动的解析gzip和 zlib,

    上传文件

    var express = require('express');
    var fs = require('fs');
    var app = express();
    
    var bodyParser = require('body-parser');
    var multer  = require('multer');
    
    app.use(express.static('public'));
    app.use(bodyParser.urlencoded({ extended: false }));
    app.use(multer({ dest: '/tmp/'}).array('image'));
    
    app.get('/index.html',function (req,res) {
      res.sendFile(__dirname + "/" + "index.html");
    });
    
    app.post('/flie_upload',function (req,res) {
    
        console.log(req.files[0]);
        // { fieldname: 'image',
        //     originalname: '2018-05-08_103026.png',
        //     encoding: '7bit',
        //     mimetype: 'image/png',
        //     destination: '/tmp/',
        //     filename: '04a8a5f92a3db4c2396ac83beb87fcd4',
        //     path: '\\tmp\\04a8a5f92a3db4c2396ac83beb87fcd4',
        //     size: 1675439 }
        var des_flie = __dirname + "/"+req.files[0].originalname;
        fs.readFile(req.files[0].path,function (err,data) {
            fs.writeFile(des_flie,data,function (err) {
                if(err){
                    console.log(err);
                }else{
                    response = {
                        message:'file upload successfully',
                        filename:req.files[0].originalname
                    }
                }
                res.end(JSON.stringify(response));
            });
        });
    
        console.log(des_flie);
    });
    
    var server = app.listen(8081, function () {
     
      var host = server.address().address
      var port = server.address().port
     
      console.log("应用实例,访问地址为 http://%s:%s", host, port)
     
    })
    

    fs.writeFile(file, data[, options], callback);
    writeFile 直接打开文件默认是 w 模式,所以如果文件存在,该方法写入的内容会覆盖旧的文件内容。
    file - 文件名或文件描述符。
    data - 要写入文件的数据,可以是 String(字符串) 或 Buffer(缓冲) 对象。
    options - 该参数是一个对象,包含 {encoding, mode, flag}。默认编码为 utf8, 模式为 0666 , flag 为 'w'
    callback - 回调函数,回调函数只包含错误信息参数(err),在写入失败时返回。

    相关文章

      网友评论

          本文标题:nodejs学习

          本文链接:https://www.haomeiwen.com/subject/vneqqqtx.html