nodejs模块——http模块
http模块主要用于创建http server服务,并且
- 支持更多特性
- 不缓冲请求和响应
- 处理流相关
本文还用到url模块和path模块,还有fs模块。url模块用于解析url,path模块用于处理和转换文件路径。
一、简单应用
代码如下:
// 文件名:demo.js // 引入http模块
var http = require('http'); // 创建http server
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n');
}).listen(1337, '127.0.0.1'); console.log('Server running at http://127.0.0.1:1337/');
$ node demo.js运行后,在浏览器可看到Hello World。
通过简单的http.createServer()创建一个server,通过server.on绑定事件处理函数,通过server.listen监听。 一个简单的http服务器就完成了。
二、稍复杂应用
所以代码放在app文件夹汇总,如下。
1、server.js
功能:创建http服务,监听请求,让route处理。
//
// 创建http server
// // 加载所需模块
var http = require('http');
var url = require('url');
var fs = require('fs'); // 设置ip和端口
// 实际应用中,可以把这些写到配置文件中
var host = '127.0.0.1',
port = 8080; // 创建http server
function start(route, handle) {
// 参数
// route 判断url是否存在,存在则调用handle处理,不存在则返回404
// handle 处理不同的url请求 // 处理request请求
function onRequest(req, res) {
// 使用url.parse()方法解析url
// 它会把url string转化为一个object
// 这样我们就可以很方便的获取url中的host、port、pathname等值了
var pathname = url.parse(req.url).pathname;
console.log('Request for ' + pathname + ' received.'); // 判断并处理不同url请求
// 后面介绍此方法
route(handle, pathname, res, req);
} // 使用http.createSserver()方法创建http server
// 并传入onRequest()方法
// 然后使用listen()方法监听指定地址
http.createServer(onRequest).listen(port, host);
console.log('Server has started and listening on ' + host + ':' + port);
} // 导出 start 方法
exports.start = start;
server.js中用到了http模块、url模块和fs模块。
使用url.parse()方法解析url,把url string转化为一个object,这样我们就可以很方便的获取url中的host,port,pathanme等值了。
var pathname = url.parse(request.url).pathname;
例:请求url:127.0.0.1:8088/about时req.url为:/about 。
最后导出start方法以便在主程序中使用。
2、router.js
功能: route判断url是否存在,存在则调用handle处理,不存在则返回404。
var fs = require('fs'); // 路由函数
// 处理不同url的请求
// 并返回相应内容 function route(handle, pathname, res, req) {
console.log('About to route a request for ' + pathname); // 判断此url是否存在特定处理函数
// 存在则调用handle处理
// 不存在则返回404页面
if (typeof handle[pathname] === 'function') {
// 后面介绍handle函数
handle[pathname](res, req);
} else {
console.log('No request handler found for ' + pathname); // 读取404页面
// 所有页面都存放在view文件夹下
var content = fs.readFileSync('./views/404.html');
res.writeHead(404, { 'Content-Type': 'text/html' });
res.write(content);
res.end();
}
}
// 导出 route 方法
exports.route = route;
路由转发,如果url存在(通过handle判断的)交由handle处理,否则返回404页面。
3、requestHandlers.js
功能:handle处理不同的url请求。
代码如下:
// 处理url请求 var fs = require('fs'); // home.html 主页
function home(res) {
console.log('Request handler "home" was called.'); // 读取home.html文件
var content = fs.readFileSync('./views/home.html');
res.writeHead(200, { 'Content-Type': 'text/html' });
res.write(content);
res.end();
} // about.html 关于页面
function about(res) {
console.log('Request handler "about" was called.'); // 读取about.html文件
var content = fs.readFileSync('./views/about.html');
res.write(200, { 'Content-Type': 'text/html' });
res.write(content);
res.end();
} // 导出页面处理函数
exports.home = home;
exports.about = about;
4、主程序main.js
上面是创建http server,判断url,处理url。
现在写主程序来运行http server,代码如下:
// 主程序 // 引入server,router及requestHandler
var server = require('./server');
var router = require('./router');
var requestHandlers = require('./requestHandlers'); // 保存url处理方法
var handle = {};
handle['/'] = requestHandlers.home;
handle['/about'] = requestHandlers.about; // 启动http server
server.start(router.route, handle);
至此,所有服务器代码写完。
5、 用到的html文件
app文件夹的的views文件夹下,创建home.html,about.html和404.html如下。
home.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Home page</title>
</head>
<body>
<p>home page</p>
</body>
</html>
about.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>About page</title>
</head>
<body>
<p>about page</p>
</body>
</html>
404.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>404 page</title>
</head>
<body>
<p>404 page not found</p>
</body>
</html>
6、运行程序
$ node main.js
访问http://127.0.0.1:8080会看到home page页面。
访问http://127.0.0.1:8080/about显示about page页面。
其他显示404 page 页面。
三、排错
错误1:
throw er; // Unhandled 'error' event
出现这种错误一般就是已经运行的另一个服务器使用了相同的端口,换一个端口就可以了。
本文作者starof,因知识本身在变化,作者也在不断学习成长,文章内容也不定时更新,为避免误导读者,方便追根溯源,请诸位转载注明出处:http://www.cnblogs.com/starof/p/5038890.html有问题欢迎与我讨论,共同进步。
nodejs模块——http模块的更多相关文章
- nodejs——网络编程模块
net模块提供了一个异步网络包装器,用于TCP网络编程,它包含了创建服务器和客户端的方法.dgram模块用于UDP网络编程. 参考链接:https://nodejs.org/api/net.html, ...
- nodejs模块——Event模块
Node.js中,很多对象会发出事件.如,fs.readStream打开文件时会发出一个事件. 所有发出事件的对象都是events.EventEmitter的实例,可以通过require(" ...
- 关于Nodejs的多进程模块Cluster
关于Nodejs的多进程模块Cluster 前述 我们都知道nodejs最大的特点就是单进程.无阻塞运行,并且是异步事件驱动的.Nodejs的这些特性能够很好的解决一些问题,例如在服务器开发中,并 ...
- Nodejs中cluster模块的多进程共享数据问题
Nodejs中cluster模块的多进程共享数据问题 前述 nodejs在v0.6.x之后增加了一个模块cluster用于实现多进程,利用child_process模块来创建和管理进程,增加程序在多核 ...
- nodejs的require模块及路径
在nodejs中,模块大概可以分为核心模块和文件模块. 核心模块是被编译成二进制代码,引用的时候只需require表示符即可,如(require('net')). 文件模块,则是指js文件.json文 ...
- 使用nodejs的net模块创建TCP服务器
使用nodejs的net模块创建TCP服务器 laiqun@msn.cn Contents 1. 代码实现 2. 使用telnet连接服务器测试 3. 创建一个TCP的client 1. 代码实现 ; ...
- 使用nodejs的http模块创建web服务器
使用nodejs的http模块创建web服务器 laiqun@msn.cn Contents 1. web服务器基础知识 2. Node.js的Web 服务器 3. 代码实现 1. web服务器基础知 ...
- Nodejs的http模块
一.http服务器 我们知道传统的HTTP服务器是由Aphche.Nginx.IIS之类的软件来搭建的,但是Nodejs并不需要,Nodejs提供了http模块,自身就可以用来构建服务器,例如: ...
- node.js零基础详细教程(7.5):mongo可视化工具webstorm插件、nodejs自动重启模块Node Supervisor(修改nodejs后不用再手动命令行启动服务了)
第七章 建议学习时间4小时 课程共10章 学习方式:详细阅读,并手动实现相关代码 学习目标:此教程将教会大家 安装Node.搭建服务器.express.mysql.mongodb.编写后台业务逻辑. ...
- nodeJS里面的模块
this 打开cmd,执行如下命令 nodeconsole.log(this); 输出如上信息,表示this是global,每个电脑的配置信息不一样的话,可能会有所差别的. 然后新建一个文件,写下如下 ...
随机推荐
- jQuery Wheel Menu:实现漂亮的 Path 风格旋转菜单
相信很多用过 Path 的都对它的独特的旋转导航菜单有深刻的印象,这个功能也被很多的 Web 开发者模仿.今天分享的这款插件可以方便的在你的网站中加入和 Path 一样的旋转菜单,可以自定义效果. 您 ...
- 【HTML5】HTML5本地数据库(Web Sql Database)
Web Sql数据库简介 Web SQL数据库API实际上不是HTML5规范的组成部分,而是单独的规范.它通过一套API来操纵客户端的数据库. Web SQL数据库的浏览器支持情况 Web SQL 数 ...
- Hybrid框架UI重构之路:五、前端那点事儿(HTML、CSS)
上文回顾 :Hybird框架UI重构之路:四.分而治之 这里讲述在开发的过程中,一些HTML.CSS的关键点. 单页模式的页面结构 在单页模式中,弱化HTML的概念,把HTML当成一个容器,BODY中 ...
- 一些XMLHttpRequest的例子代码
以下例子摘录自:javascript权威指南 //异步请求(事件监听请求是否返回) function getText(url,callback){ var request = new XMLHttpR ...
- SharePoint Server 2016 IT Preview 先睹为快
1.首先下载SharePoint Server 2016 IT Preview安装包,大约2.8GB,当然如果有需要,还可以下载两种提供测试的语言包,其他语言包还未提供下载,如下图: 2.我是在已经安 ...
- spring+ibatis+多数据源
环境:spring3.1+ibatis2.3.4+oracle+hbase要求:需要在工程中操作两个不同的数据源,一个是mssql,另一个是hbase.实现: <bean id=" ...
- Visual Studio将Delop之后生成的dll或者wsp复制到指定目录
用VS开发sharepoint项目的时候,有很多个project,每个project都会生成一个wsp包,如果手工把wsp文件找到,复制出来,拷贝到服务器上,再部署,就有点麻烦. 所以写了个批处理命令 ...
- [Android]官网《Testing Support Library》中文翻译
以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/5048524.html 翻译自 Android Develope ...
- JDBC连接MySQL 方法 实例及资料收集
JDBC连接MySQL 方法 实例及资料收集 准备工作 首先,安装MySQL,配置用户名和密码,创建数据库. 可参见之前的文章: http://www.cnblogs.com/mengdd/p/315 ...
- Android 监听锁屏、解锁、开屏 操作
1.首先定义 ScreenListener package com.app.lib; import android.content.BroadcastReceiver; import android ...