zoukankan      html  css  js  c++  java
  • NODE编程(三)--构建Node Web程序1

    一、HTTP服务器的基本知识

      1、Node如何向开发者呈现HTTP请求

      Node中的http模块提供了HTTP服务器和客户端接口:

    var http = require('http');

      创建HTTP服务器要调用http.createServer()函数。它只有一个函数,是个回调函数,服务器每次收到HTTP请求后都会调用这个回调函数。这个请求回调会收到两个参数,请求和响应对象,通常简写为req和res。

    var http = require('http');
    var server = http.createServer(function(req,res){
        //处理请求
    });

      2、一个用“hello world”做响应的HTTP服务器

    var http = require('http');
    var server = http.createServer(function(req,res){
        res.end('hello world');
    });
    server.listen(3000);

      3、读取请求头及设定响应头

      Node提供了几个修改HTTP响应有的方法:res.setHeadrt(field.value),res.getHeader(field)和res.removeHeader(field).

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

      4、设定HTTP响应的状态吗

      我们经常要返回默认状态200之外的HTTP状态码。

    二、构建RESTful Web服务

      本节创建一个RESTful Web服务,一个使用HTTP方法谓词提供精简API的服务。

      创建标准的REST服务器需要实现四个HTTP谓词,每个谓词为覆盖一个待办事项清单的操作任务:

      POST 向待办事项清单中添加事项

      GET 显示当前事项列表,或则显示某一事项的详情。

      DELETE 从待办事项清单中移除事项

      PUT 修改已有事项。

      1、用POST请求创建资源。

      按照RESTful的说法,资源的创建通常是跟谓词POST对应的,因此POST将在待办事项清单中创建一个事项。

      在Node中,可以通过检查req.method属性查看用的是哪个HTTP方法(谓词)。知道请求用的是哪个方法,服务器就能知道要执行哪个任务。

      当Node的HTTP解析器读入并解析请求数据时,他会将数据做成data时间的形式,吧解析好的数据块放入其中,等待程序处理。

      我们新建一个todo.js文件

    /**
     * POST请求字符串缓存
     */
    var http = require('http');
    var url = require('url');
    var items = [];                         //用一个常规的Javascript数组存放数据
    
    var server = http.createServer(function(req,res){
        switch (req.method){                //req.method是请求所有的HTTP方法
            case 'POST':
                var item = '';              //为进来的事情设置字符缓存
                req.setEncoding('utf8');    //将进来的data事件编码为UTP-8字符串
                req.on('data',function(chunk){
                    item += chunk ;         //将数据凭借到缓存上
                });
                req.on('end',function(){
                   items.push(item);        //将完整的新事项压入事项数组中
                    res.end('ok
    ');
                });
                break;
        }
    });

      2、用GET请求获取资源

      为了处理GET,我么把他添加到switch语种,再加上待办事项的逻辑

    var http = require('http');
    var url = require('url');
    var items = [];                         //用一个常规的Javascript数组存放数据
    
    var server = http.createServer(function(req,res){
        switch (req.method){                //req.method是请求所有的HTTP方法
            case 'POST':
                var item = '';              //为进来的事情设置字符缓存
                req.setEncoding('utf8');    //将进来的data事件编码为UTP-8字符串
                req.on('data',function(chunk){
                    item += chunk ;         //将数据凭借到缓存上
                });
                req.on('end',function(){
                   items.push(item);        //将完整的新事项压入事项数组中
                    res.end('ok
    ');
                });
                break;
            case 'GET':
                items.forEach(function(item,i){
                    res.write(i+')'+itme+'
    ');
                });
                res.end();
                break;
        }
    });

      NODE和其他语言一样,提供了一个REPL(读取-计算-输出-循环)环境,在命令行中不带任何参数运行node就可以进入这个环境。

      3、用DELETE请求移除资源

    ......
       case 'DELETE':
                var path = url.parse(req.url).pathname;
                var i = parseInt(path.slice(1),10);
                if(isNaN){              //检查数字是否有效
                    res.statusCode = 400;
                    res.end('Invalid item id');
                }else if(!item[i]){     //确保请求的索引存在
                    res.statusCode = 404;
                    res.end('Item not found');
                }else{
                    itmes.splice(i,1);  //删除请求事项
                    res.end('OK
    ');
                }
                break;
  • 相关阅读:
    数据类型
    注释
    编译型语言和解释型语言
    POJ1026 Cipher(置换的幂运算)
    最短路(代码来源于kuangbin和百度)
    POJ1753 Flip Game(bfs、枚举)
    POJ1860 Currency Exchange(bellman-ford)
    【转】博弈—SG函数
    【转】欧几里得与扩展欧几里得
    HDU 5833 Zhu and 772002(高斯消元)
  • 原文地址:https://www.cnblogs.com/xz1024/p/5792095.html
Copyright © 2011-2022 走看看