node搭建服务器详解及模块化

来源:互联网 发布:幻 游戏 知乎 编辑:程序博客网 时间:2024/06/05 19:32

一、server

一个简单的服务器

>
var http = require(“http”); //引入http模块;
http.createServer(function(req,res){ //req:request 请求;res:response 响应;
console.log(req);
}).listen(8080,function{
console.log(“OK”)
});

1、req

  • 解析路径


    var url =require(‘url’);
    地址栏:http://localhost:8080/index.js?user=ddtx&age=22
    //req.url=/index/index.js?user=yu&age=10;
    var urlObj = url.parse(res.url);
    //urlObj = (parthname:/index/index.js,query:{user;’yu’,age;10}}

  • parse:网络路径解析为对象模式。

  • query:是一个对象,装着查询字符串转化后的对象。
  • pathname:纯路径,请求的根目录。

2、res

  • 设置响应头

    res.writeHeader(状态码,短语,{名:值})


res.setHeader(名,值)

res.statusCode=状态码
* write
响应数据,但是不断开连接
* end
响应数据,断开连接

3.1、设置响应头的方法:

res.writeHeader(状态码,短语,{名:值})

res.setHeader(名,值)

3.2、设置状态码的方法:

res.statusCode=状态码

3.3、解析路径使用的模块:

    var url=require("url");    var urlObj = url.parse(req.url);

二、module 模块

1、导出

exports 只能导出对象

module.exports 可以是任何数据类型,exports能做到的,module.exports都可以实现

2、导入

require();

2.1、require 机制

优先去缓存中查找如果没有查到才去磁盘上查找,包只从磁盘加载一次

2.2、 node 遵循是 common.js规范

3.1、为什么模块化开发?

为了让node.js的文件可以相互调用。

3.2、什么是模块化?

每个js都是一个模块。

3.3、如何使用模块?

一个文件暴露 exports

一个文件引用 require

3.4、exports和module.exports的区别?

exports 只能导出object对象,module.exports 可以使任何数据类型。

3.5、使用模块的好处?

封装代码,复用性好,扩展性好,可维护性好

3.6、require载入模块的机制?

优先去缓存中查找如果没有查到才去磁盘上查找,包只从磁盘加载一次

3.7、模块的分类?

核心模块和文件模块

三、fs

异步和同步的区别?

1、官方已建议采用异步的方式

2、异步的优点:后面的代码会尽早的执行,程序执行效能比较高

3、同步的优点:编程简单,对程序员的思维要求比较低

4、异步的缺点:程序员编程思维要求高,出错容易,调试困难

5、同步的缺点:代码执行效率低,在大规模访问情况下,整个系统的响应速度低

异步的特点?

1.具有事件和回调函数

2.只有事件发生回调函数才执行。

同步的特点?

1.没有回调函数,也没有事件。

2.没有按照行号一行一行执行。

四、包和模块的区别?

1、包相关

  • 包可以有多个模块,包必须有package.json。
  • 如何确定一个包:package.json中有name 和 version属性
  • require(“包的路径”);package.json中实际执行的是main指定的文件

2、模块是一个独立的js文件。

实例:

  • 点菜
  • 做菜
  • 送菜
  • 结账

js是单线程的,有事件循环和事件队列

服务员是主线程,点菜就举手,看到举手后就下单,下单后马上做饭,送完饭才会去给下一个顾客服务

五、Buffer

概述

Buffer(缓存区),JavaScript语言自身只有字符串数据类型。没有二进制数据类型操作操作磁盘数据等操作必须使用二进制数据
node.js中处理I/O操作中移动数据时,就有可能使用Buffer库,不需要使用require()获得buffer类

操作

创建

new buffer(size)

new Buffer(str[,encoding])

转化为字符串

buf.toString([encoding[,start[,end]]])

填充

buf.fill(string) 通常用来做初始化