Node.js实现一个HTTP服务器的方法示例


Posted in Javascript onMay 13, 2019

项目地址

http server

题目

设计一个模拟HTTP服务端程序

自己设计一个WEB的程序,监听80端口。支持多客户端连接,能满足客户的HTTP请求(浏览器访问),包括以下功能:

1.基本功能:get、post(带数据请求)、head请求

2.模拟登陆访问,页面redirector功能(设计登陆页面login.html、主页index.html,如果直接访问index.html则跳转到登陆页面,只有登陆后才能打开主页)

3.其他(如cookie)

效果展示

Node.js实现一个HTTP服务器的方法示例

思路

用户打开网址 127.0.0.1:8080 时,客户端发起 get 请求,请求路径为 / ,服务端返回 login.html 页面。

if (request.url === '/') {
 fs.readFile('./login.html', function (err, data) {
  if (!err) {
   response.writeHead(200, { "Content-Type": "text/html;charset=UTF-8" });
   response.end(data)
  } else {
   throw err;
  }
 });
}

当用户试图通过浏览器地址访问 /index 时,服务端会判断请求头是否携带 cookie ,若没有则将请求重定向到 /

if (!request.headers.cookie) {
 response.writeHead(301, { 'Location': '/' })
 response.end()
}

如果有携带 cookie ,则将浏览器重定向到 index.html 页面

window.location.href = '/index'

用户在 login.html 界面输入用户名并点击登录,客户端会携带用户名发起一个 post 请求

let input = {
 name: document.querySelector('.input').value
}
let request = new XMLHttpRequest(); // 新建XMLHttpRequest对象
request.open('POST', '/login', true)
request.send(JSON.stringify(input))

服务端接收参数,设置 cookie

let input = {
 name: document.querySelector('.input').value
}
let request = new XMLHttpRequest(); // 新建XMLHttpRequest对象
request.open('POST', '/login', true)
request.send(JSON.stringify(input))

如果客户端发情 HEAD 请求,只返回相应头

if (request.url === '/getHead') {
 response.writeHead(200);
 response.end()
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JS判断元素为数字的奇异写法分享
Aug 01 Javascript
jquery+css+ul模拟列表菜单具体实现思路
Apr 15 Javascript
JavaScript 数组详解
Oct 10 Javascript
Javascript毫秒数用法实例
Feb 05 Javascript
javascript强制点击广告的方法
Feb 06 Javascript
JavaScript中setTimeout和setInterval函数的传参及调用
Mar 11 Javascript
vue打包使用Nginx代理解决跨域问题
Aug 27 Javascript
jQuery实现为动态添加的元素绑定事件实例分析
Sep 07 jQuery
详解js获取video任意时间的画面截图
Apr 17 Javascript
JavaScript之Blob对象类型的具体使用方法
Nov 29 Javascript
Element Card 卡片的具体使用
Jul 26 Javascript
详解Vue中Axios封装API接口的思路及方法
Oct 10 Javascript
jQuery事件绑定和解绑、事件冒泡与阻止事件冒泡及弹出应用示例
May 13 #jQuery
Vue表单绑定的实例代码(单选按钮,选择框(单选时,多选时,用 v-for 渲染的动态选项)
May 13 #Javascript
JavaScript封闭函数及常用内置对象示例
May 13 #Javascript
vue 表单之通过v-model绑定单选按钮radio
May 13 #Javascript
JS中的函数与对象的创建方式
May 12 #Javascript
详解无限滚动插件vue-infinite-scroll源码解析
May 12 #Javascript
ES6中的迭代器、Generator函数及Generator函数的异步操作方法
May 12 #Javascript
You might like
免费手机号码归属地API查询接口和PHP使用实例分享
2014/04/10 PHP
PHP使用memcache缓存技术提高响应速度的方法
2014/12/26 PHP
php中照片旋转 (orientation) 问题的正确处理
2017/02/16 PHP
php防止表单重复提交实例讲解
2019/02/11 PHP
php数组和链表的区别总结
2019/09/20 PHP
你的编程语言可以这样做吗?
2006/09/07 Javascript
用javascript实现给出的盒子的序列是否可连为一矩型
2007/08/30 Javascript
使用jQuery实现dropdownlist的联动效果(sharepoint 2007)
2011/03/30 Javascript
关于jQuery $.isNumeric vs. $.isNaN vs. isNaN
2013/04/15 Javascript
JavaScript 事件对象介绍
2015/04/13 Javascript
浅谈JavaScript的Polymer框架中的事件绑定
2015/07/29 Javascript
JavaScript SHA512&SHA256加密算法详解
2015/08/11 Javascript
jQuery实现动态添加和删除一个div
2015/08/12 Javascript
jQuery实现的导航下拉菜单效果
2016/07/04 Javascript
Bootstrap基本插件学习笔记之折叠(22)
2016/12/08 Javascript
原生js实现类似fullpage的单页/全屏滚动
2017/01/22 Javascript
JS操作input标签属性checkbox全选的实现代码
2017/03/02 Javascript
javascript流程控制语句集合
2017/09/18 Javascript
微信小程序如何获取用户头像和昵称
2019/09/23 Javascript
[13:16]INFAMOUS vs VGJ T BO3
2018/06/07 DOTA
wxPython窗口的继承机制实例分析
2014/09/28 Python
【Python】Python的urllib模块、urllib2模块批量进行网页下载文件
2016/11/19 Python
Python之文字转图片方法
2018/05/10 Python
Python3模拟curl发送post请求操作示例
2019/05/03 Python
Django MEDIA的配置及用法详解
2019/07/25 Python
Python values()与itervalues()的用法详解
2019/11/27 Python
Python实现分数序列求和
2020/02/25 Python
Python request中文乱码问题解决方案
2020/09/17 Python
CSS3实现大小不一的粒子旋转加载动画
2016/04/21 HTML / CSS
关于前端上传文件全面基础扫盲贴(入门)
2019/08/01 HTML / CSS
地球鞋加拿大官网:Earth Shoes Canada
2020/11/17 全球购物
DOM和JQuery对象有什么区别
2016/11/11 面试题
委托书英文
2015/01/28 职场文书
小学二年级班主任工作经验交流材料
2015/11/02 职场文书
SpringBoot整合minio快速入门教程(代码示例)
2022/04/03 Java/Android
Redis基本数据类型String常用操作命令
2022/06/01 Redis