Node.js 实战 (第二部分)

4. 构建Node Web程序

1.HTTP服务器的基本知识

呈现一个HTTP请求

var http = require("http");

var server = http.createServer(function(req, res) {
  // 读取请求头 以及 设置响应头
  var body = "cool!";
  res.setHeader("Content-Length", body.length);
  res.setHeader("Content-Type", "text/plain");

  // 设置状态码
  res.statusCode = 302;
  // 处理请求
  // res.write(body)
  // res.end();

  res.end(body);
});

server.listen(3000);
  • 添加和移除响应头的顺序可以随意,但一定要在调用res.write()或 res.end()之前。
  • 在响应主体的第一部分写入之后,Node会刷新已经设定好的HTTP头。

2. 构建RESTful Web服务

1. 用POST请求创建资源

var http = require("http");

var server = http.createServer(function(req, res) {

  // 设置utf8后, 下面data就会给出字符串,而不是对象
  req.setEncoding('utf8')

  // 读取请求头 以及 设置响应头
  req.on("data", function(chunk) {
    console.log("parsed" + chunk);
  });
  req.on("end", function() {
    console.log("done parsing");
    res.end();
  });
});

server.listen(3000);

5. 存储Node程序中的数据

1. 无服务的数据存储

  • 内存存储
    • 弊端: 不能持久化
  • 基于文件的存储
    • 弊端: 单文件并发有问题.

2. 关系型数据库管理系统

关系型数据库,查询起来很容易, 开源软件也可以不花钱

  • MySQL
  • PostgreSQL
    • 轻量目录访问协议
    • 通过安全服务应用程序接口
    • 同步复制: 在每次数据操作后对复制进行验证,从而防止数据丢失
    • npm install pg

3. NoSQL数据库

含义是 No SQL 或者 Not only SQL

  • Redis
    • 适合处理不需要长期访问的数据存储
    • 数据存储于 RAM 中
    • 数据存储有限, 但数据操作非常快
    • npm install redis
  • MongoDB
    • 通用的 非关系型 数据库,
    • npm install mongodb
  • Mongoose
    • 其可以顺畅地使用MongoDB
    • 提供了一些实用的功能

6. Connect

其是一个框架, 使用中间件的模块化组件.

1. 搭建一个Connect程序

  • 第三方模块需要安装. npm install connect
var connect = require('connect');
var app = connect();
app.listen(3000);

2. 工作机制

  • 其中间件概念受到Ruby的Rack框架的启发.
    • 小巧
    • 自包含
    • 可以在整个程序中重用
  • next() 在中间件里调用, 用回调函数,而不是从方法中返回, 是为了可以在中间件组件里运行异步逻辑.
var connect = require("connect");

function logger(req, res, next) {
  console.log("%s %s", req.method, req.url);
  next();
}

function hello(req, res) {
  res.setHeader("Content-Type", "text/plain");
  res.end("hello world!");
}

connect()
  .use(logger)
  .use(hello)
  .listen(3000);

3. 中间件的顺序很重要

如果前一个中间件,不调用next(), 命令链中的后续中间件都不会被调用.

4. 挂载中间件和服务器

可以根据挂载的路径前缀.选择性的调用中间件

var connect = require("connect");

connect()
  .use(logger)
  .use('/admin',restrice)
  .use('/admin',admin)
  .use(hello)
  .listen(3000);
function admin(req, res, next) {
  switch (req.url) {
    case "/":
      res.end("try /users");
      break;
    case "/users":
      res.setHeader("Content-Type", "application/json");
      res.end(JSON.stringify(["tobi", "loki", "jane"]));
      break;
  }
}

5. 创建可配置中间件

利用闭包, 返回可以配置的中间件

function setup(options) {
  // 设置逻辑
  
  return function (req, res, next) {
    // 中间件逻辑
  } 
}
app.use(setup({some:'options'}))

推荐阅读更多精彩内容

  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 31,333评论 2 89
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 132,654评论 18 139
  • 概要 64学时 3.5学分 章节安排 电子商务网站概况 HTML5+CSS3 JavaScript Node 电子...
    阿啊阿吖丁阅读 7,457评论 0 3
  • 下午难得半日闲,做一次小小整理。 卧室的衣柜塞得满满当当,竖挂着,横叠着,扒拉出来,一件一件捡翻,绝大多数衣服二、...
    如如在阅读 168评论 0 0
  • 今天 玩的很开心的一天。 早上睡到八点多自然醒,玩手机到十点等他考完试就起床洗漱,化妆,换衣服出门。 今天打卡了微...
    爱兔几的小仙仙阅读 152评论 0 0