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\n‘);
            });
            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\n‘);
            });
            break;
        case ‘GET‘:
            items.forEach(function(item,i){
                res.write(i+‘)‘+itme+‘\n‘);
            });
            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\n‘);
            }
            break;
时间: 2024-12-16 06:13:33

NODE编程(三)--构建Node Web程序1的相关文章

使用Node.js的socket.io模块开发实时web程序

首发:个人博客,更新&纠错&回复 今天的思维漫游如下:从.net的windows程序开发,摸到nodejs的桌面程序开发,又熟悉了一下nodejs,对“异步”的理解有了上上周对操作系统的学习而更能理解.然后发现了Node.js中的socket.io这个模块,又觉得跟前几天用.net做客户端的socket游戏了.技术世界,兜兜转转,相逢一笑,疑是故人. socket.io用来做实时web程序,解决之前的B/S程序只有无状态连接,特定需求还需要用长连接这种“奇技淫巧”的问题.当然,这是html

[NodeJS]Node开发Web程序入门

Node内置了http模块提供HTTP服务器和客户端接口 var http = require("http"); 创建HTTP服务器只需要简单的调用http.createServer()函数,参数是回调函数,接收两个参数: request,  response对象. var server = http.createServer(function(req, res){}); 在触发回调函数之前Node就已经对HTTP请求头进行了解析,但是并没有对请求体进行解析.另外需要有开发者自行调用r

16、Cocos2dx 3.0游戏开发找小三之Node:父节点、子节点、傻傻分不清楚

重开发者的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/30476133 Cocos2d-x 采用了场景.层.精灵的层次结构来组织游戏元素, 与此同时,这个层次结构还对应了游戏的渲染层次,因此游戏元素可以组织成树形结构,称作渲染树. Cocos2d-x 把渲染树上的每一个游戏元素抽象为一个节点,即 Node. 一切游戏元素都继承自 Node,因此它们 都具有 Node 所提供的特性. Node 定义了一个可绘制

Nodejs学习笔记(七)--- Node.js + Express 构建网站简单示例

目录 前言 新建项目.建立数据库以及其它准备工作 新建express + ejs 项目:sampleEjs 创建数据库 修改package.json文件,安装session和mysql模块 样式和JQuery文件 清理项目冗余文件,并添加监听 规划路由,并新建相关文件 实现登录和注册需要的数据访问方法 注册 登录 首页 安全退出 写在之后 前言 上一篇学习了一些构建网站会用到的一些知识点   http://www.cnblogs.com/zhongweiv/p/nodejs_express_we

使用GruntJS构建Web程序 (1)

使用GruntJS构建Web程序 (1) Gruntjs是JavaScript项目的构建工具,也是基于node的一个命令行工具.很多开源JS项目都是使用它搭建.如jQuery.Qunit.CanJS等.它有以下作用 合并JS文件 压缩JS文件 单元测试(基于QUnit) 一句话:完全自动化(automation) 以下是它的安装过程. 一.安装node 参考nodejs入门 (最新的node会自动安装npm) 二.安装grunt命令行工具grunt-cli 使用-g全局安装,这样可以在任何一个目

Node.js【6】Web开发、进阶(模块加载、控制流、部署、弊端)

笔记来自<Node.js开发指南>BYVoid编著 实现过程:https://github.com/ichenxiaodao/express-example 第5章 使用Node.js进行Web开发 从零开始用Node.js实现一个微博系统,功能包括路由控制.页面模板.数据库访问.用户注册.登录.用户会话等内容. 会介绍Express框架.MVC设计模式.ejs模板引擎以及MongoDB数据库的操作. 5.1.准备工作 Express(http://expressjs.com/)除了为http

使用GruntJS构建Web程序 (2)

Snandy Stop, thinking is the essence of progress. 使用GruntJS构建Web程序 (2) 前一篇记录了Grunt的安装,这篇介绍下怎么使用Gruntjs来搭建一个前端项目,然后使用grunt合并,压缩JS文件. 大概有如下步骤 新建项目Bejs 新建文件package.json 新建文件Gruntfile.js 命令行执行grunt任务 一.新建项目Bejs 源码放在src下,该目录有两个js文件,selector.js和ajax.js.编译后

node.js之十大Web框架

之前接触过Node.js是因为好奇大前端越来越能干了,连我后台的饭碗都要抢了,太嚣张了,于是我想打压打压它,然后就这样接触它了.再到后来是因为Settings-Sync插件二次开发,我需要用node.js造一个mock server,而当时在开源项目上找到一个模拟github rest api的node.js服务端程序,然后我就在此基础上开发.从工作中学习有应用场景有目的性,果然还是学的要快很多. 今天之所以要说一说node.js的十大Web框架,主要是觉得以后针对VsCode开发或者是我自己的

[读书笔记]了不起的node.js(三)

这周的nodejs学习内容为几个依赖包的使用,把书上的例子都敲了一遍.这篇就以例程为线索,复习一下一周的工作. 1.connect 这个例程主要是使用connect依赖包,connect提供一个中间件(由函数组成,与请求.响应对象交互)的功能.书中也介绍了connect内置其他的中间件,这些中间件起到组织代码完成web功能的作用. 2.session 使用connect进行用户会话,进行基本的登录系统.通过中间件实现了检查登录.展示表单.用户匹配.处理登出的功能.展示了中间件的强大和组织方式.