NodeJS学习笔记

NodeJS就是一个独立运行js的解析器。

模块

将代码合理拆分至不同js文件中,每一个文件就是一个模块,文件路径就是模块名。

每个模块都有requireexportsmodule三个预先定义好的变量可用。

  • require:用于在当前模块加载和使用其他模块,传入模块名,返回一个模块导出对象。

  • exports:是当前模块的导出对象,用于导出模块公有方法和属性。(对应其他模块require得到的对象)

  • module:访问当前模块一些相关信息,替换当前模块的导出对象。

模块解析路径

  1. 内置模块:不做路径解析,直接返回导出对象。

  2. node_modules目录:某模块绝对路径为/home/user/hello.js,并使用require('foo/bar')方式加载时,NodeJS依次使用一下路径

    • /home/user/node_modules/foo/bar
    • /home/node_modules/foo/bar
    • /node_modules/foo/bar
  3. NODE_PATH环境变量

文件操作

  • 小文件拷贝
    var fs = require('fs');
    fs.readFileSync(src) //实现读文件操作
    fs.writeFileSync(dst) //实现写文件操作

  • 大文件拷贝
    var fs = require('fs');
    fs.createReadStream(src).pipe(fs.createWriteStream(dst));//创建一个只读数据流和一个只写数据流,并用pipe方法将两个数据流连接在一起。

  • Buffer(数据块)

    • 全局构造函数Buffer提供对二进制数据的操作,除了可以读取文件得到的Buffer实例外,也可以直接构造。(通过new)
    • 可以用.length获取字节长度,也可以使用index方式读取指定位置的字节。
    • 可以与字符串互相转化。(toString(‘utf-8’))
    • 字符串转换为二进制数据。(new Buffer('hello‘,’utf-8'))
    • 区别:字符串只读,修改后原字符串不变。Buffer原数据改变。
  • Stream(数据流)

  • FileSystem(文件系统)

    • 文件属性读写:常用有fs.stat、fs.chmod、fs.chown等。
    • 文件内容读写:常用有fs.readFile、fs.readdir、fs.writeFile、fs.mkdir等。- 底层文件操作:常用有:fs.open、fs.read、fs.write、fs.close等。
    • 注意:基本所有fs模块API的回调参数都有两个。第一个在有错误发生时等于异常对象,第二个始终用于返回API方法执行结果。
  • Path(路径)

    • path.normalize:将传入的路径转换为标准路径
    • path.join:将传入的多个路径拼接为标准路径
    • path.extname:得到文件扩展名

网络操作

HTTP


var http = require('http');

http.createServer(function(req,res){

res.writeHead(200,{'Content-Type':'text-plain'});

res.end('Hello World\n');

}).listen(3000);


'http'模块提供两种使用方式:

  • 作为服务器端,创建一个HTTP服务器,监听HTTP客户端请求并返回响应。

  • 作为客户端,发起一个HTTP客户端请求,获取服务端,客户端模式如下:

    var options = { hostname: 'www.example.com', port: 80, path: '/upload', method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded' } }; //.request方法创建一个客户端,并设置目标和请求头数据。 var request = http.request(options, function (response) {}); request.write('Hello World'); request.end();


    http.get('http://www.xxx.com/',function(res){});


HTTPS

与http模块类似,区别:https模块需要额外处理SSL证书。

服务器模式下,创建一个HTTPS服务器的实例:(可以使用server.addContext('xx.com',{key:xx,cert:xx})方法添加多组证书


var options = {

//私钥 key: fs.readFileSync('./ssl/default.key'),

//公钥 cert: fs.readFileSync('./ssl/default.cer')

}; var server = https.createServer(options, function (request, response) { // ... });


URL

                                             href

                                         host                             path

                                    ----------------------   -----------------------------------

http: // user:pass @ host.com :8080 /p/a/t/h ?query=string #hash


protocol auth hostname port pathname search hash

Query String

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


querystring.parse('foo=bar&baz=qux&baz=quux&corge'); /* =>{ foo: 'bar', baz: ['qux', 'quux'], corge: '' }/ querystring.stringify({ foo: 'bar', baz: ['qux', 'quux'], corge: '' }); / =>'foo=bar&baz=qux&baz=quux&corge='*/


进程管理

  • Process可以通过process对象感知和控制NodeJS自身进程的方方面面。Process不是内置模块,是一个全局对象。

  • Child_process:该模块可以创建和控制子进程。

  • Cluster该模块是对child_process模块的进一步封装,专用于解决单进程NodeJS Web服务器无法充分利用多核CPU的问题。

应用场景举例:

  1. 通过process.argv获取命令行参数。(node执行程序路径和主模块文件路径占据了argv[0]和argv[1]两个位置,所以第一个命令行参数从argv[2]开始。)

    • process.argv.slice(2)
  2. 退出程序。(正常退出程序,退出状态码为0;异常挂起时不为0;)

    • process.exit(num);
  3. 控制输入输出。(标准输入流(stdin)、标准输出流(stdout)、标准错误流(stderr)分别对应process.stdin、process.stdout和process.stderr,第一个为只读数据流,后两个为只写数据流。)

    • function log(){
      process.stdout.write(
      util.format.apply(util,arguments) + '\n'
      );
      }

你可能感兴趣的:(NodeJS学习笔记)