[NodeJS]Node开发Web程序入门

Node内置了http模块提供HTTP服务器和客户端接口

var http = require("http");

创建HTTP服务器只需要简单的调用http.createServer()函数,参数是回调函数,接收两个参数: request,  response对象。

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

在触发回调函数之前Node就已经对HTTP请求头进行了解析,但是并没有对请求体进行解析。另外需要有开发者自行调用response.end()方法来结束响应。

HTTP服务器需要绑定一个端口号,用来监听接入的请求。使用http.server类的listen方法

一个最简单的HTTP服务器代码:

var http = require("http");

var server = http.createServer(function(req, res){
    res.write("hello world");
    res.end();
}

server.listen(8080);

接下来让我们看看如何获取请求头信息和如何设置响应头信息

1. 获取请求头信息

req.headers

req.rawHeaders

通过这两个属性获取请求头信息。这两者的区别在于,headers获取的是键值对格式的对象,并且重复请求头信息会被舍弃。而rawHeaders获取的是列表,奇数为请求头名称,偶数为请求头信息,同时重复的请求头信息也会放在列表中。

2. 设置响应头信息

response对象提供了setHeader(field, value),  getHeader(field, value),  removeHeader(field) 方法

设置响应头一定要在发送消息体之前,常用的响应头包括

Content-Type: "text/plain", "text/html"

Content-Length 设置响应消息体的字节长度  可以使用Buffer.byteLength方法获取字符串数据的实际字节长度

3. 设定响应状态码

response.statusCode

NodeJS中的http模块提供了http.STATUS_CODES属性用来描述标准HTTP协议规定的状态码及描述文字说明

设置response.statusCode = 302 表示 重定向

构建RESTful WEB服务

创建标准的REST服务器需要实现四个HTTP操作: POST  GET  DELETE  PUT 分别对应人们常说的CURD操作

另外人们也常用curl命令行方式来进行web操作

当有请求发送数据时,HTTP解析器会将数据做成data事件的形式,将解析好的数据放入chunk中。也就是监听request请求的data事件和end事件

var http = require("http");
var server = http.createServer(function(req, res){
    req.setEncoding("utf-8");
    req.on("data", function(chunk){
        console.log("parsed", chunk);
    });
    req.on("end", function(){
        console.log("done parsing");
        res.end();
    });
});

使用req.method属性来判断请求方式

解析URL路径信息还需要用到核心模块url

通过理解req.method,url,和request请求对象的数据解析原理对于以后使用封装好的高级框架是有好处的。

比如在Express中,就提供了.all() .get() .post() .put() .delete()等方法

构建静态文件服务器

Stream.pipe()方法可以理解为将源头的数据(ReadableStream)通过管道pipe流动到目的地(WritableStream)

所有ReadableStream都能接入到任何的WriteableStream中,比如request就是一个ReadableStream, response就是一个WritableStream

var http = require("http");
var parse = require("url").parse;
var join = require("path").join;
var fs = require("fs");
var root = __dirname;

var server = http.createServer(function(req, res){
    var pathname = parse(req.url).pathname;
    var path = join(root, pathname);
    fs.stat(path, function(err, stat){
        if(err){
            if(err.code === "ENOENT"){
                res.statusCode = 404;
                res.end("Not Found");
            }else{
                res.statusCode = 500;
                res.end("Internal Server Error");
            }
        }else{
            //没有错误,准备读取文件内容并返回
            res.setHeader("Content-Length", stat.size);
            var stream = fs.createReadStream(path);
            stream.pipe(res);
            stream.on("error", function(err){
                res.statusCode = 500;
                res.end("Internal Server Error");
            });
        }
    });
});
server.listen(8080);
时间: 2024-10-19 22:48:07

[NodeJS]Node开发Web程序入门的相关文章

你也可以玩转Skype -- 基于Skype API开发外壳程序入门

原文:你也可以玩转Skype -- 基于Skype API开发外壳程序入门 Skype是目前这个星球上最厉害的IM+VOIP软件,Skype现在已经改变了全球2.8亿人的生活方式.你,值得拥有! :) Skype中文官网:http://skype.tom.com/ Skype全球官网:http://www.skype.com/ Skype也是世界上最开放,最具创新意识的IM工具,他提供了Skype API, Skype4COM, Skype4Java几种形式的开发接口给Skype爱好者编写Sky

Node.js web快速入门 -- KoaHub.js

介绍 KoaHub.js -- 基于 Koa.js 平台的 Node.js web 快速开发框架.可以直接在项目里使用 ES6/7(Generator Function, Class, Async & Await)等特性,借助 Babel 编译,可稳定运行在 Node.js 环境上. //base controller, admin/controller/base.controller.js export default class extends koahub.http{ constructo

node 开发web 登陆功能

node.js基于express框架搭建一个简单的注册登录Web功能 这个小应用使用到了node.js  bootstrap  express  以及数据库的操作 :使用mongoose对象模型来操作 mongodb 如果没了解过的可以先去基本了解一下相关概念~ 首先注明一下版本,因为express因为版本的不同使用的方式也不同,我这算是目前最新的了吧 还没有装express的可以移步到这里 看看express框架的获取安装 1.简单地项目初始化 进入你的nodejs安装路径下边,如图,然后执行

Elipse开发Java程序入门,HelloWord

今天看到一个专业的学术程序是Java写的,而我经常用的是Matalb,所以感觉十分不舒服.之前学的Java开发感觉也忘光了,所以感觉,知识必须要总结好,不然容易忘记.这也就是我写这篇文章的原因.希望能让大家能对几本的Elipse平台下进行Java开发的基本配置有所了解,以便快速入门.明天就是平安夜了,也纪念一下吧.顺便不的不说一下背景,最近进行大论文写作时效率很低,几个月过去了也没有写出多好的程序.有的也只是在看程序或者看别人的论文,也借此给自己一个新的阶段吧. (1)新建一个工程 File -

ASP.NET 5系列教程 (五):在Visual Studio 2015中使用Grunt、Bower开发Web程序

基于Visual Studio 2015,你可以: 方便的管理前端包,如jQuery, Bootstrap, 或Angular. 自动运行任务,如LESS.JavaScript压缩.JSLint.JavaScript单元测试等. 方便的获得Web开发者生态圈的工具包. 为了实现这些场景,Visual Studio 2015已经内置了一些流行的第三方工具包: Bower:Web包管理器,Bower可以帮你安装前端包,包括JavaScript.CSS类库.对于服务器端包,请通过NuGet包管理. G

C#开发web程序中关于 一般处理程序中的context.Response.ContentType = "text/plain"

简单的静态页面calculator.html: <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>     <title></title> </head

Node.js web快速入门 -- KoaHub.js组件koa-static-server

koa-static-server Static file serving middleware for koa with directory, rewrite and index support koa-static-server static file serving middleware for koa with directory, rewrite and index support Installation $ npm install koa-static-server API var

使用knewcode,用传统C++开发Web网站

一.准备工作 1.编译器gcc Linux(建议Ubuntu 14.04 32位版)下,最新版本需下载源代码自行编译,地址如下, http://gcc.gnu.org/ Windows下,可以直接下载编译版本Mingw,下载地址如下, http://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win32/Personal%20Builds/mingw-builds/ Ubuntu下,如不需要最新版本,可用如

《Node.js入门》Windows 7下Node.js Web开发环境搭建笔记

近期想尝试一下在IBM Bluemix上使用Node.js创建Web应用程序.所以须要在本地搭建Node.js Web的开发測试环境. 这里讲的是Windows下的搭建方法,使用CentOS 的小伙伴请參考:<Node.js入门>CentOS 6.5下Node.js Web开发环境搭建笔记 Node.js是什么? 我们看看百科里怎么说的? JavaScript是一种执行在浏览器的脚本,它简单,轻巧.易于编辑,这样的脚本通经常使用于浏览器的前端编程.可是一位开发人员Ryan有一天发现这样的前端式