Node学习入门篇(四):Node构建Web应用

标签: node web http
3人阅读 评论(0) 收藏 举报
分类:

内容

  • Node API处理
  • 构建RESTful Web服务
  • 静态资源服务
  • 表单处理
  • HTTPS

Node API处理

  • 底层封装
    这里写图片描述

Node如何向开发者呈现HTTP请求;
如何编写一个简单的HTTP服务器,如何做响应;
如何读取请求头,以及如何设置响应头;
如何设置HTTP响应的状态码

  • 生命周期
    这里写图片描述

Node不会自动往客户端写任何响应。在调用完请求回调函数之后,就要由你负责用res.end()方法结束响应了(见图4-2)。这样在结束响应之前,你可以在请求的生命期内运行任何你想运行的异步逻辑。如果你没能结束响应,请求会挂起,直到客户端超时,或者它会一直处于打开状态

  • 绑定端口

绑定一个端口,让服务器可以监听接入的请求。用到server.listen()方法,它能接受一个参数组合,指定一个能监听连接的端口。

  • 读取请求头和设定响应头

构建RESTful Web服务

  • RESTful
    • POST
    • 当Node的HTTP解析器读入并解析请求数据时,它会将数据做成data事件的形式,把解析好的数据块放入其中
      这里写图片描述
    • GET
    • 为了提高响应速度,如果可能的话,应该在响应中带着Content-Length域一起发送
    • 设定Content-Length域会隐含禁用Node的块编码,因为要传输的数据更少,所以能提升性能(字节长度,不是字符长度)
    • DELETE
    • Node提供了url模块,特别是.parse()函数
    • 字符串转换为数字,可把字符串传给JavaScript的全局函数parseInt(),它会返回一个Number
    • 状态码被设定成400,表示坏请求
    • PUT

静态资源服务

  • 静态文件(CSS、JavaScript、图片)服务
  • 健壮而又高效的静态文件服务器
  • 目的

    • 创建一个简单的静态文件服务器;
    • 用pipe()优化数据传输;
    • 通过设定状态码处理用户和文件系统错误
  • 实现

    • 根目录:__dirname在Node中是一个神奇的变量,它的值是该文件所在目录的路径
    • 服务器会将这个脚本所在的目录作为静态文件的根目录,但实际上你可以将根目录配置为任意的目录路径
    • 攻击:如果你想把它放到生产环境中,应该更全面地检查输入的有效性,以防用户通过目录遍历攻击访问到你本来不想开放给他们的那部分内容
    • 传输:高层流式硬盘访问fs.ReadStream完成,它是Node中Stream类之一
    • 优化传输: Stream.pipe()
      这里写图片描述
      这里写图片描述
      • 处理服务器错误
        • 处理因使用fs.ReadStream可能出现的错误。如果你访问不存在的文件,或者不允许访问的文件,或者碰到任何与文件I/O有关的问题,当前的服务器会抛出错误
        • 在Node中,所有继承了EventEmitter的类都可能会发出error事件
        • fs.ReadStream这样的流只是专用的EventEmitter,有预先定义的data和end等事件
        • 默认情况下,如果没有设置监听器,error事件会被抛出。如果你不监听这些错误,那它们就会搞垮你的服务器
        • 为了防止服务器被错误搞垮,我们要监听错误,在fs.ReadStream上注册一个error事件处理器
          这里写图片描述

表单处理

  • 接收表单数据
    • 处理提交的表单域;
    • 用formidable处理上传的文件;
    • 实时计算上传进度
      -处理提交的表单域
    • application/x-www-form-urlencoded:这是HTML表单的默认值;
    • multipart/form-data:在表单中含有文件或非ASCII或二进制数据时使用
    • 文件上传
      这里写图片描述
      • formidable的流式解析器让它成为了处理文件上传的绝佳选择,也就是说它能随着数据块的上传接收它们,解析它们,并吐出特定的部分
      • 不仅快,还不会因为需要大量缓冲而导致内存膨胀,即便像视频这种大型文件,也不会把进程压垮
    • 集成formidable
      • (1) 通过npm安装formidable;
      • (2) 创建一个IncomingForm实例;
      • (3) 调用form.parse()解析HTTP请求对象;
      • (4) 监听表单事件field、file和end;
      • (5) 使用formidable的高层API
      • formidable会发出事件。比如说,在收到文件并处理好后会发出file事件,收完输入域后会发出field事件
        这里写图片描述
    • d 计算上传进度
      • Formidable的progress事件能给出收到的字节数,以及期望收到的字节数
      • 做出一个进度条
        这里写图片描述
      • 把这个进度传回到用户的浏览器中去
      • Socket.IO这样的实时模块,可能只需要几行代码

HTTPS

  • 安全的超文本传输协议(HTTPS)提供了一种保证Web会话私密性的方法
  • HTTPS将HTTP和TLS/SSL传输层结合到一起。用HTTPS发送的数据是经过加密的,因此更难窃听
  • 一个私钥和一份证书
  • 钥本质上是个“秘钥”,可以用它来解密客户端发给服务器的数据。私钥保存在服务器上的一个文件里,放在一个不可信用户无法轻易访问到的地方
    这里写图片描述
  • 创建证书需要私钥。输入下面的命令会生成名为key-cert.pem的证书:
    这里写图片描述
  • 创建和配置
    这里写图片描述
  • 网站部署到公网上,你就应该找个证书颁发机构(CA)进行注册,并为你的服务器取得一份真实的、受信的证书
查看评论

node.js结合mongodb构建的web项目

  • 2014年03月15日 10:55
  • 2.98MB
  • 下载

Node.js项目实践:构建可扩展的Web应用

  • 2017年03月15日 21:04
  • 55.57MB
  • 下载

应用node.js+mongodb数据库实现一个mvc架构的web项目

最近在学nodejs,也没怎么学就是大概学了一点,并尝试着写了一个应用mvc架构的web项目,和传统的web项目比较起来确实能节省了很多,不用再用第三方的服务器,有过js或jq的经验的同学更容易上手,...
  • two_people
  • two_people
  • 2016-07-05 21:58:31
  • 978

利用nodejs构建网站

1、选择文件夹 2、执行:express  node(node是你指定的文件夹名,可随意指定),默认使用的是jade模块,如果想安装ejs模块,就使用这个命令:express -e  node 3...
  • u013742084
  • u013742084
  • 2016-05-10 16:05:02
  • 250

Node——构建Web应用

基础功能 之前我们通过http模块创建了一个简单的服务器,但是对于一个网络应用来说肯定是远远不够的,在聚义的业务中我们至少有如下要求: 请求方法的判断 URL的路径解析 URL中查询字符串的解析...
  • exialym
  • exialym
  • 2016-08-21 22:11:34
  • 2877

Node -- 构建Web应用

基础功能Node是十分贴近网络协议的,它非阻塞、事件机制使得我们在网络编程时十分轻便。下面的内容,将从http模块中服务器端的request事件开始分析。官方经典的HelloWorld代码:var h...
  • u014328357
  • u014328357
  • 2017-07-10 11:53:33
  • 196

从零开始构建部署上线Node.js+Express+Bootstrap+Jade响应式网站应用---RSPT丨留学生活第一站(一)

- 创建一个Express应用 - 使用npm和package.json管理应用依赖 - 调整Express工程结构到MVC架构 - Route和Controller概念分离 - 创建新...
  • Tong_T
  • Tong_T
  • 2017-06-16 02:07:15
  • 1043

Node应用程序构建——使用MongoDB和Backbone

  • 2017年04月10日 19:24
  • 28.02MB
  • 下载

Node学习入门篇(五):Node数据存储

关系型数据库存储 NoSQL数据库存储 MySQL 1) 安装node-mysql模块 npm install mysql 2) 创建程序逻辑 ...
  • w_bu_neng_ku
  • w_bu_neng_ku
  • 2018-04-15 14:26:02
  • 0

Node学习入门篇(三):Node编程基础

Node的异步编程 如何响应一次性事件 如何处理重复性事件 如何让异步逻辑顺序执行 Node功能的组织和重用 Node模块 1. require...
  • w_bu_neng_ku
  • w_bu_neng_ku
  • 2018-04-14 22:52:31
  • 1