利用 http 模块开始写简单的web服务。

模块:

const http=require('http');
const fs=require('fs');
const path=require('path'); function startServer() {
let onRequest=function (req,res) {
console.log('recived a request.');
res.writeHead(200,{'Content-Type':'text/html'}); let wwwdir= path.resolve(__dirname,'../www');
// console.log(wwwdir);
let readStream = fs.createReadStream(wwwdir+'/bbb.html');
readStream.pipe(res);
}; let server=http.createServer(onRequest);
server.listen(80,'192.168.1.101');
}; exports.startServer = startServer;

调用者,APP,使用两行就开启了一个简单的web服务。

let server=require('./mod_server');

server.startServer();

单文件版路由,响应了几个不同的页面:

const http = require('http');
const fs = require('fs');
const path = require('path'); let wwwdir = path.resolve(__dirname, '../www'); let onRequest = function (req, res) {
console.log('recived a request. ' + req.url);
if (req.url === '/' || req.url === '/home') {
res.writeHead(200, {'Content-Type': 'text/html;charset=UTF-8'});
let readStream = fs.createReadStream(wwwdir + '/index.html');
readStream.pipe(res);
} else if (req.url === '/about') {
res.writeHead(200, {'Content-Type': 'text/html;charset=UTF-8'});
let readStream = fs.createReadStream(wwwdir + '/about.html');
readStream.pipe(res);
} else if (req.url === '/api') {
res.writeHead(200, {'Content-Type': 'application/json'});
let jsonObj = {
name: "alex",
email: 'abc@gg.com',
age: 32
};
// console.log(JSON.parse(jsonStr)); // 反序列化
res.end(JSON.stringify(jsonObj));
} else {
res.writeHead(404, {'Content-Type': "text/html;charset=utf8"});
res.write('抱歉 404 ,你要的页面没找到.');
}
;
}; let server = http.createServer(onRequest);
server.listen(8001, 'localhost');

分开为独立文件的 web server

一、server.js

const http = require('http');

function startServer(route, handle) {
let onRequest = function (request, response) {
console.log('Request received ' + request.url);
// 传递到 route 函数
route(handle, request.url, response);
}; let server = http.createServer(onRequest); server.listen(, '127.0.0.1');
console.log('Server started on 127.0.0.1:8001');
} module.exports.startServer = startServer;

二、router.js

const fs = require('fs');
const path = require('path'); let wwwdir = path.resolve(__dirname, '../www'); function route(handle, pathname, response) {
console.log('Routing a request for ' + pathname);
// 判断 handle中是否有对应的 pathname 函数
if (typeof handle[pathname] === 'function') {
handle[pathname](response); // response作为参数传递到 handle 函数
} else {
response.writeHead(, {'Content-Type': 'text/html'});
fs.createReadStream(wwwdir + '/404.html', 'utf8').pipe(response);
}
} module.exports.route = route;

三、handler.js

const fs = require('fs');
const path = require('path'); let wwwdir = path.resolve(__dirname, '../www'); function home(response) {
response.writeHead(, {'Content-Type': 'text/html'});
fs.createReadStream(wwwdir + '/index.html', 'utf8').pipe(response);
} function review(response) {
response.writeHead(, {'Content-Type': 'text/html'});
fs.createReadStream(wwwdir + '/about.html', 'utf8').pipe(response);
} function api_records(response) {
response.writeHead(, {'Content-Type': 'application/json'});
let jsonObj = {
name: "Alex",
passwd: "",
email: 'aaa@cc.com',
age:
};
response.end(JSON.stringify(jsonObj));
} module.exports = {
home: home,
review: review,
api: api_records
};

四、app.js 主程序,模块方式调用前面的三个文件即可

const server = require('./server');
const router = require('./router');
const handler = require('./handler'); let handle = {};
handle["/"] = handler.home;
handle['/home'] = handler.home;
handle['/review'] = handler.review;
handle['/api'] = handler.api; server.startServer(router.route, handle);

最近学习的 Node.js 之 http的更多相关文章

  1. Docker学习之——Node.js+MongoDB+Nginx环境搭建(一)

    最近在学习Node.js相关知识,在环境搭建上耗费了不少功夫,故此把这个过程写下来同大家分享一下,今天我先来介绍一下Docker,有很多人都写过相关知识,还有一些教程,在此我只想写一下,我的学习过程中 ...

  2. 方便大家学习的Node.js教程(一):理解Node.js

    理解Node.js 为了理解Node.js是如何工作的,首先你需要理解一些使得Javascript适用于服务器端开发的关键特性.Javascript是一门简单而又灵活的语言,这种灵活性让它能够经受住时 ...

  3. 学习笔记——node.js

    node.js的作用在于,号称可以让服务器支持更多的连接.比如说,php + apche可以让服务器支持4000个并发连接,那么node.js + apche可以让服务器支持并发几万个. 为什么这么牛 ...

  4. Node.js学习(Node.js基础)

    1.开发环境搭建 v8引擎是作为解析JavaScript程序来运行的 nodejs是一个高性能的,第一个体现在他的JavaScript解析速度很快,v8引擎性能很高,第二个事件驱动和非阻塞 2.全局对 ...

  5. Node.js学习笔记——Node.js开发Web后台服务

    一.简介 Node.js 是一个基于Google Chrome V8 引擎的 JavaScript 运行环境.Node.js 使用了一个事件驱动.非阻塞式 I/O 的模型,使其轻量又高效.Node.j ...

  6. 让我们一起学习《Node.js入门》一书吧!

    Node.js入门 读完本书之后,你将完成一个完整的web应用,该应用允许用户浏览页面以及上传文件. 里面对一些知识的讲解,让你略窥Node.js的门径.最好一段代码一段代码的写下来,我的习惯是手里拿 ...

  7. 最近学习的 Node.js 基础:安装、环境配置、forever

    最近工作中,因为某某某某原因,需要用到Node.js  . 发现在很多方面和python很像,比如generator / yield ,比如模块的使用方式,比如http模块. 先安装个环境,windo ...

  8. 从零开始学习渗透Node.js应用程序

    本文来源于i春秋学院,未经允许严禁转载 0x01 介绍 简单的说 Node.js 就是运行在服务端的 JavaScript.Node.js 是一个基于Chrome JavaScript 运行时建立的一 ...

  9. vue学习之node.js

    Node.js是一个Javascript运行环境(runtime environment),发布于2009年5月,由Ryan Dahl开发,实质是对Chrome V8引擎进行了封装.本文详细介绍了No ...

  10. nodejs学习笔记Node.js 调试命令

    3.4  调试        47  下面是一个简单的例子: $ node debug debug.js < debugger listening on port 5858 connecting ...

随机推荐

  1. Cocos Creator学习五:触摸和重力传感响应事件

    1.移动设备上主要涉及触摸响应事件以及重力传感响应事件的处理. 事件主要分两类: 针对节点事件处理的节点响应事件cc.Node.EventType(主要是触摸响应事件和鼠标响应事件): 针对全局系统事 ...

  2. 通过P3P头实现跨域设置cookie

    PHP的setcookie函数可以设置域,但是只能在当前域内,如果出现多域可由如下办法处理:实现原理:www.b.com/set_cookie.php   在b域名下设置a域名的cookie < ...

  3. HCharts随笔之简单入门

    此处可以对比我的另一个Echars简单入门 直接上源码 <!DOCTYPE html> <html> <head> <meta http-equiv=&quo ...

  4. 笔记《JavaScript 权威指南》(第6版) 系统理论知识概要

    主要内容概要 [JavaScript语言核心]词法结构,类型.值和变量,表达式和运算符,语句,对象,数组,函数,类和模块,正则表达式的模式匹配,JavaScript的子集和扩展,服务器端JavaScr ...

  5. Jenkins安装使用教程

    一.说明 持续集成:Continuous integration,CI.包括两层含义,一是指项目的每个开发人员每天都向项目代码仓库要通过git等提交他们的代码,二是指在代码提交后实现自动化的构建.部署 ...

  6. popstate事件在低版本webkit中的调用

    popstate是H5的history系列中的事件,但是在低版本的webkit中会自动触发.H5中的history api是不会使页面发生跳转的,只是操作地址栏和响应的state属性而已,而且是手动操 ...

  7. FtpWebRequest.UsePassive属性:设置FTP工作模式

    默认值:true,被动模式 PASV(被动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路. 当需要传送数据时, 服务器在命令链路上用PASV ...

  8. 开源HUSTOJ

    hustoj -- 请一定认真看完本页再动手安装,以免无谓的折腾!====== 根据你选择的发行版不同,从下面三个脚本里选一个来用. <b>不要相信百度来的长篇大论的所谓教程,那些都是好几 ...

  9. UVa LA 3266 - Tian Ji -- The Horse Racing 贪心,不只处理一端,也处理另一端以理清局面 难度: 2

    题目 https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_pr ...

  10. MongoDB的数据库导出和导入以及备份

    数据库的导出 mongoexport -d 数据库名 -c 集合名 -o 导出文件的保存地址及保存文件名.json --type json 数据库的导入 mongoimport -d 数据库名 -c ...