利用 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(8001, '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(404, {'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(200, {'Content-Type': 'text/html'});fs.createReadStream(wwwdir + '/index.html', 'utf8').pipe(response);
}function review(response) {response.writeHead(200, {'Content-Type': 'text/html'});fs.createReadStream(wwwdir + '/about.html', 'utf8').pipe(response);
}function api_records(response) {response.writeHead(200, {'Content-Type': 'application/json'});let jsonObj = {name: "Alex",passwd: "123456",email: 'aaa@cc.com',age: 22};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);

转载于:https://www.cnblogs.com/frx9527/p/nodejs2.html

最近学习的 Node.js 之 http相关推荐

  1. js学习(node.js环境)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] javascript之前一般用于web前端开发(比如jquery等等),然而由于node.js的 ...

  2. 【Node学习】—Node.js中模块化开发的规范

    [Node学习]-Node.js中模块化开发的规范 Node.js 规定一个JavaScript就是一个模块,模块内部定义的变量和函数默认情况下在外部无法得到 模块化内部可以使用exports对象进行 ...

  3. JavaScript 的进阶学习 (Node.js)_01

    Node的学习 Node.js 是一个基于 Google 所开发的浏览器 Chrome V8 引擎的 JavaScript 运行环境. 属于 服务端的 JavaScript . 2019.03.01 ...

  4. Redis 学习 - 05 Node.js 客户端操作 Redis、Pipeline 流水线

    使用编程语言客户端操作 Redis 目前我们进行的操作都是通过 Redis 的命令行客户端 redis-cli 进行的. 开发者也可以通过 Redis 图形管理软件操作,例如 RDM(Redis De ...

  5. 前端学习笔记——node.js

    初识 Node.js 什么是 Node.js Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境. Node.js 中的 JavaScript 运行环境 注意: 浏 ...

  6. 【node学习】node.js

    一.node与浏览器的区别 1.生态系统不同 没有document.window以及其他对象(比如cookies) 2.运行环境 在node中,可以选择运行环境,不需要像浏览器端那样去做适配. 3.模 ...

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

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

  8. 【Node.js学习小案例】DNS域名解析 一

    Node.js 百度百科: Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台, 用来方便地搭建快速的 易于扩展的网络应用· Node.js 借助事件驱动, 非阻塞I/ ...

  9. 狼叔直播 Reaction《学习指北:Node.js 2022 全解析》

    大家好,我是若川.持续组织了6个月源码共读活动,感兴趣的可以点此加我微信 ruochuan02 参与,每周大家一起学习200行左右的源码,共同进步.同时极力推荐订阅我写的<学习源码整体架构系列& ...

最新文章

  1. 实战:车牌识别之车牌定位
  2. 免费在线阅读:用于计算机视觉、机器学习、机器人的线性代数丨资源
  3. 数据结构Java02【栈、队列、单链表(增删节点)、循环链表、双向循环链表、递归(斐波那契、汉诺塔)】
  4. 多线程相关的一些知识点
  5. Android10创建文件Permission denied 失败
  6. 2008日志清理 server sql_SQL Server 2008 收缩日志 清空删除大日志文件
  7. CAS实现原子操作的三大问题
  8. django配置在MySQL_怎么在Django中安装与配置mysql
  9. 【项目管理】人力资源计划和组建项目团队
  10. C#根据网址生成静态页面
  11. ConcurrentHashMap源码跟踪记录
  12. Hadoop面试题总结(大数据面试)
  13. 用Google地图来做出哈比人五军之战
  14. 4K网络视频下载器:4K Video Downloader mac汉化教程
  15. Android下使用W25Q32
  16. C语言 日历查询系统 成品
  17. (转载)深入了解iOS中的OOM(低内存崩溃)
  18. axio请求数据如何等待异步完成接着执行
  19. 鼠标滑轮控制Div水平滚动
  20. [ROC-RK3566-PC] 如何编译Linux_SDK并打包Ubuntu系统固件?

热门文章

  1. Servlet 异常处理
  2. jQuery左右选择框
  3. Spring学习(8)--- @Autowired注解(一)
  4. Android之GPS定位详解
  5. 开启Windows7多用户远程桌面
  6. 匿名内部类使用的场景之一
  7. 打造政产学研新型研发机构 加速人工智能科研成果转化
  8. Socket SSL通讯
  9. java基础-迭代器(Iterator)与增强for循环
  10. SQLSERVER的三种备份模式