Node.js 实战 (第二部分)

2018-07-22  本文已影响21人  rxdxxxx

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);

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. 关系型数据库管理系统

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

3. NoSQL数据库

含义是 No SQL 或者 Not only SQL

6. Connect

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

1. 搭建一个Connect程序

var connect = require('connect');
var app = connect();
app.listen(3000);

2. 工作机制

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'}))
上一篇 下一篇

猜你喜欢

热点阅读