node.js基础教程

1.关键字

node_module

index.js

package.json

工程目录

npm与第三方库(递归依赖)
npm install node-echo -g
参数中的-g表示全局安装,因此node-echo会默认安装到以下位置,并且NPM会自动创建好Linux系统下需

要的软链文件或Windows系统下需要的.cmd文件。


2.回调函数与等待
Stream基于事件机制工作,代码中data事件会源源不断地被触发,不管doSomething函数是否处理得过来

var rs = fs.createReadStream(src);

rs.on('data', function (chunk) {//data事件
    rs.pause();
    doSomething(chunk, function () {
        rs.resume();
    });
});

rs.on('end', function () {
    cleanUp();
});

3.文件拷贝程序与事件机制实践
var rs = fs.createReadStream(src);

var ws = fs.createWriteStream(dst);

rs.on('data', function (chunk) {
    if (ws.write(chunk) === false) {
        rs.pause();
    }
});


rs.on('end', function () {
    ws.end();
});

ws.on('drain', function () {
    rs.resume();
});

根据drain事件来判断什么时候只写数据流已经将缓存中的数据写入目标,可以传入下一个待写数据了

例如上边的大文件拷贝程序,NodeJS直接提供了.pipe方法来做这件事情,其内部实现方式与上边的代码类似

4.文件系统使用
文件属性读写。

其中常用的有fs.stat、fs.chmod、fs.chown等等。

文件内容读写。

其中常用的有fs.readFile、fs.readdir、fs.writeFile、fs.mkdir等等。

底层文件操作。

其中常用的有fs.open、fs.read、fs.write、fs.close等等。

NodeJS最精华的异步IO模型在fs模块里有着充分的体现,例如上边提到的这些API都通过回调函数传递结果。以fs.readFile为例:

fs.readFile(pathname, function (err, data) {
    if (err) {
        // Deal with error.
    } else {
        // Deal with data.
    }
});

如上边代码所示,基本上所有fs模块API的回调参数都有两个。第一个参数在有错误发生时等于异常对象,第二个参数始终用于返回API方法执行结果。
此外,fs模块的所有异步API都有对应的同步版本,用于无法使用异步操作时,或者同步操作更方便时的情况。同步API除了方法名的末尾多了一个Sync之外,异常对象与执行结果的传递方式也有相应变化。同样以fs.readFileSync为例:
try {
    var data = fs.readFileSync(pathname);
    // Deal with data.
} catch (err) {
    // Deal with error.
}

5.网络操作

请求:
var options = {
        hostname: 'www.example.com',
        port: 80,
        path: '/upload',
        method: 'POST',
        headers: {
            'Content-Type': 'application/x-www-form-urlencoded'
        }
    };

var request = http.request(options, function (response) {});
request.write('Hello World');//发送请求
request.end();

便捷的get api
http.get('http://www.baidu.com', function (response) {//必须包含http等详细地址

    var body = [];


    console.log(response.statusCode);
    console.log(response.headers);

    response.on('data', function (chunk) {
        body.push(chunk);
    });

    response.on('end', function () {
        body = Buffer.concat(body);
        console.log(body.toString());
    });
});

应答:
http.createServer(function (request, response) {
    var body = [];

    console.log(request.method);
    console.log(request.headers);

    request.on('data', function (chunk) {
        body.push(chunk);
    });

    request.on('end', function () {//本函数须对端执行request.end();才会触发事件
        body = Buffer.concat(body);
        console.log('cws');
console.log(body.toString());
    });
}).listen(80);

5.
处理HTTP请求时url模块使用率超高,因为该模块允许解析URL、生成URL,以及拼接URL

querystring模块用于实现URL参数字符串与参数对象的互相转换

zlib模块提供了数据压缩和解压的功能。当我们处理HTTP请求和响应时,可能需要用到这个模块

request和response对象除了用于读写头数据外,都可以当作数据流来操作
request.on('data', function (chunk) {
        body.push(chunk);
    });

6.异步回调编程
fn2('input', function (output2) {
    fn1(output2, function (output1) {
        // Do something.
    });
});

fn2的返回值是output2?

request.on('data', function (chunk) {
        body.push(chunk);
    });

request.on('data')的返回值传给function

7.REPL:指在线的开发环境

8.事件循环与回调的区别?

9.事件发射器 事件循环相关

10.每种类型的流是一个EventEmitter实例,并抛出的时代不同的实例几个事件。例如,一些常用的事件是:
data - 当有数据可读取此事件。

end - 当没有更多的数据读取此事件被触发。

error - 当有任何错误或接收数据写入此事件。

finish - 当所有数据已刷新到底层系统触发此事件

网络io也是一种流

11.全局对象:
Node.js的全局对象是具有全局性的,它们可在所有的模块中应用,不用包含某个模块
例如console,process,setTimeout(cb, ms),setInterval(cb, ms)等

12.工具模块:
OS Module
提供基本的操作系统相关的实用功能
Path Module
提供工具,用于处理和转换文件的路径
Net Module
提供服务器和客户端的数据流。充当网络包装
DNS Module
提供做实际DNS查询的功能,以及使用底层操作系统的名称解析功能
Domain Module
提供一个方式来处理多个不同的I/O操作,作为一个组

13.EXPRESS框架:用于开发web服务,例如网站,类似php?但不是后台程序?
Express是一个最小的,灵活的Node.js Web应用程序框架,它提供了一套强大的功能来开发Web和移动应用程序。 它有助于基于Node Web应用程序的快速开发。下面是一些Express框架的核心功能:

允许设立中间件响应HTTP请求

定义了用于执行基于HTTP方法和URL不同动作的路由表

允许动态渲染基于参数传递给模板HTML页面

var express = require('express');
var app = express();

app.get('/', function (req, res) {
   res.send('Hello World');
})

var server = app.listen(8081, function () {

  var host = server.address().address
  var port = server.address().port

  console.log("Example app listening at http://%s:%s", host, port)
})

14.restful
REST表示代表性状态传输。REST是一种基于Web标准的架构,并使用HTTP协议。 
var express = require('express');
var app = express();
var fs = require("fs");

app.get('/listUsers', function (req, res) {
   fs.readFile( __dirname + "/" + "users.json", 'utf8', function (err, data) {
       console.log( data );
       res.end( data );
   });
})

var server = app.listen(8081, function () {

  var host = server.address().address
  var port = server.address().port

  console.log("Example app listening at http://%s:%s", host, port)

})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值