美文网首页
Node.js 实战 (第二部分)

Node.js 实战 (第二部分)

作者: rxdxxxx | 来源:发表于2018-07-22 21:18 被阅读21次

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'}))

相关文章

  • 01_Node.js 安装

    前言 “Node.js 从基础到实战” 系列文章中,讲解了 Node.js 从安装到项目实战及项目部署整个过程所需...

  • Node.js 实战 (第二部分)

    4. 构建Node Web程序 1.HTTP服务器的基本知识 呈现一个HTTP请求 添加和移除响应头的顺序可以随意...

  • 3月阅读书单

    《Node.js实战》,《node.js开发指南》推荐星级: 4星都是比较优秀的关于node.js的书籍,我是在看...

  • 《RocketMQ实战与原理分析》

    《RocketMQ实战与原理分析》 第一部分是RocketMQ 实战(第1 ~ 8 章) 第二部分是源码分析 (第...

  • 2017年书单

    Java并发编程实战 人月神话 Node.js实战 Java加密与解密的艺术 Git版本控制管理 Linux sh...

  • Node学习路径

    七天学会 NodeJS || site 1 ++ site 2 Node.js 实战心得 Node书籍 ...

  • 实战部分

    更新源apt-get update 搜索apt-cache search nginx 修改Apache监听端口 关...

  • 构建 Node Web ToDoList 程序

    构建 Node Web ToDoList 程序 本文是《Node.js 实战》读书笔记。 node 中 HTTP请...

  • 【翻译】Node.js 教程 —— 实战:todo app(1)

    这节课开始使用 Node.js todo app 来实战,whoooooooooooooooooo 我们将会从基础...

  • Node.js源码解析-启动-js部分

    Node.js源码解析-启动-js部分 欢迎来我的博客阅读:《Node.js源码解析-启动-js部分》 Node....

网友评论

      本文标题:Node.js 实战 (第二部分)

      本文链接:https://www.haomeiwen.com/subject/efurmftx.html