初学Node(六)搭建一个简单的服务器
搭建一个简单的服务器
通过下面的代码可以搭建一个简单的服务器:
var http = require("http");
http.createServer(function(request,response){
    response.writeHead(200,{"Content-Type":"text/plain"});
    response.write("hello my first demo");
    response.end();
}).listen("8080");
console.log("server start");
搭建一个简单的服务器需要依赖http模块,通过http.createServer()来生成一个服务器实例通过listen()来启动这个实例。
http.createServer()参数是一个函数,这个函数的两个参数分别为request和response,request记录着从前端到服务器的各种信息,response记录从服务器端到前端的各种信息。
request有三个重要的属性:request.url:表示请求的地址,request.method:表示请求的方式,request.headers:表示所有的请求头信息。
另外我们可以通过request.setEncoding()来设置请求的编码。
我们也可以通过on()来为request的事件来注册处理函数,request.on()有两个事件分别为data和end,data表示正在接收数据,end表示数据接收完成,我们从前台向服务器发送数据常用的方式就是get和post,对于get请求我们可以直接从url中提取出传输的数据,而post的数据一般是放在请求体中的此时我们就需要data这个事件来获取前台的发送数据,使用方式为:
var postData = "";
request.on("data",function(data){
postData +=data;
});
request.on("end",function(){
console.log(postData);
});
在开始的例子中response.writeHead用来设置http返回的头信息,write()的参数表示要写入的内容,end()用来将write()的内容写入到response对象中。
listen()函数表示启动当前的http实例,listen()函数可以接收两个参数,第一个参数表示要监听的端口,第二个参数表示要监听的地址,也就是只有请求地址符合listen()的设置,http.createServer()里面的函数才会执行,listen()的默认地址为localhost。
处理不同的请求
上面的例子对于所有的请求执行的操作都是一样的,在实际开发中这个情况是不存在,我们需要针对不同的URL来做不同的处理,此时我们就需要对request对象的url属性进行判断了:
var http = require("http");
var demo = http.createServer(function(request,response){
    var path = request.url;
    console.log(path);
    switch(path){
        case "/homepage":
            response.writeHead(200,{"Content-Type":"text/plain"});
            response.write("hello this is homepage");
            response.end();
            break;
        case "/details":
            response.writeHead(200,{"Content-Type":"text/plain"});
            response.write("hello this is details");
            response.end();
            break;
        default:
            response.writeHead(404,{"Content-Type":"text/plain"});
            response.write("sorry");
            response.end();
            break;
    }
}).listen("8080");
console.log("server start");
返回一个html页面
上面的这些我们只是返回几个字而已,正常情况下我们返回的通常是一个完整的页面,如果我们在response.write()中拼一个html页面出来,就会很麻烦而且很容易出错,此时我们就可以利用fs模块来简化这个操作:
var http = require("http");
var fs = require("fs");
var demo = http.createServer(function(request,response){
    var path = request.url;
    if(path=="/register"){
        fs.readFile("register.html",function(err,data){
            response.writeHead(200,{"Content-Type":"text/html; charset=utf-8"});
            response.write(data);
            response.end();
        });
    }else{
        response.writeHead(200,{"Content-Type":"text/plain"});
        response.write("hello node");
        response.end();
    }
}).listen("8080");
console.log("server start");
初学Node(六)搭建一个简单的服务器的更多相关文章
- 用nodejs搭建一个简单的服务器
		
使用nodejs搭建一个简单的服务器 nodejs优点:性能高(读写文件) 数据操作能力强 官网:www.nodejs.org 验证是否安装成功:cmd命令行中输入node -v 如果显示版本号表示安 ...
 - 【netty】(2)---搭建一个简单服务器
		
netty(2)---搭建一个简单服务器 说明:本篇博客是基于学习慕课网有关视频教学.效果:当用户访问:localhost:8088 后 服务器返回 "hello netty"; ...
 - 利用 nodeJS 搭建一个简单的Web服务器(转)
		
下面的代码演示如何利用 nodeJS 搭建一个简单的Web服务器: 1. 文件 WebServer.js: //-------------------------------------------- ...
 - 使用gitblit搭建一个简单的局域网服务器
		
使用gitblit搭建一个简单的局域网服务器 1.使用背景 现在很多使用github管理代码,但是github需要互联网的支持,而且私有的git库需要收费.有一些项目的代码不能外泄,所以,搭建一个局域 ...
 - Golang学习-第二篇 搭建一个简单的Go Web服务器
		
序言 由于本人一直从事Web服务器端的程序开发,所以在学习Golang也想从Web这里开始学起,如果对Golang还不太清楚怎么搭建环境的朋友们可以参考我的上一篇文章 Golang的简单介绍及Wind ...
 - Prism for WPF 搭建一个简单的模块化开发框架(六)隐藏菜单、导航
		
原文:Prism for WPF 搭建一个简单的模块化开发框架(六)隐藏菜单.导航 这个实际上是在聊天之前做的,一起写了,也不分先后了 看一下效果图,上面是模块主导航,左侧是模块内菜单,现在加一下隐藏 ...
 - 学习用node.js建立一个简单的web服务器
		
一.建立简单的Web服务器涉及到Node.js的一些基本知识点: 1.请求模块 在Node.js中,系统提供了许多有用的模块(当然你也可以用JavaScript编写自己的模块,以后的章节我们将详细讲解 ...
 - Node学习(二) --使用http和fs模块实现一个简单的服务器
		
1.创建一个www目录,存储静态文件1.html.1.jpg. * html文件内容如下: 12345678910111213 <html lang="en">< ...
 - 轻松创建nodejs服务器(1):一个简单nodejs服务器例子
		
这篇文章主要介绍了一个简单nodejs服务器例子,本文实现了一个简单的hello world例子,并展示如何运行这个服务器,需要的朋友可以参考下 我们先来实现一个简单的例子,hello world ...
 
随机推荐
- 精确计算TFS中新增以及更改的代码行数
			
<configuration> <configSections> <section name="LOCTargets" type="Cons ...
 - 安卓开发笔记——深入Activity
			
在上一篇文章<安卓开发笔记——重识Activity >中,我们了解了Activity生命周期的执行顺序和一些基本的数据保存操作,但如果只知道这些是对于我们的开发需求来说是远远不够的,今天我 ...
 - Redis PHP通用类
			
找到一个比较全的Redis PHP操作类库,分享给大家 <?php /** * redis操作类 * 说明,任何为false的串,存在redis中都是空串. * 只有在key不存在时,才会 ...
 - Android 优化布局层次结构
			
前面介绍过使用HierarchyViewer和Android lint来优化我们的程序,这一篇算是总结性的,借助一个小例子来说用怎么优化应用布局.这个例子是android官网给出的,作者也当一把翻译. ...
 - 事务复制中的msrepl_ccs
			
在事务复制里,如果一个article被更新,distributionagent会调用相应的存储过程将数据更新到订阅端. 这些存储过程分别是[sp_MSins_dboTableName],[sp_MSd ...
 - ios auto layout demystified (二)
			
Constraints Constraint Types Layout constraints (NSLayoutConstraint class, public)—这些规则指定了view的几何学.他 ...
 - DateTimePicker 控件的格式设置
			
DateTimePicker 控件的格式设置 CustomFormat属性设置 : yyyy-MM-dd HH:mm:ss 月大写M,分钟小写m,小时H代表24小时计算,h代表12小时计算yyyy- ...
 - Unity3D 纹理偏移(TextureOffset)浅析
			
首先,给出圣典的解释: Material.mainTextureOffset 主纹理偏移量 var mainTextureOffset : Vector2 Description描述 The text ...
 - tar exclue文件夹
			
tar zcvf logs.tar.gz logs --exclude=logs/log1
 - 【干货分享】Google 的设计准则,素材和资源
			
在谷歌,他们说, “专注于用户,所有其它的就会水到渠成 ”.他们遵循设计原则,寻求建立让用户惊喜的用户体验.谷歌一直挑战自己,为他们的用户创造一种视觉语言,综合优秀设计的经典原则和创新.谷歌设计规范是 ...