nodejs学习

2018-11-21  本文已影响7人  喵呜Yuri

打算学之前被朋友推荐看了《了不起的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),在写入失败时返回。

上一篇下一篇

猜你喜欢

热点阅读