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日期相关函数总结分享
Oct 15 Javascript
分享Javascript中最常用的55个经典小技巧
Nov 29 Javascript
Node.js 制作实时多人游戏框架
Jan 08 Javascript
基于javascript实现图片预加载
Jan 05 Javascript
js手机号4位显示空格,银行卡每4位显示空格效果
Mar 23 Javascript
angularjs中ng-bind-html的用法总结
May 23 Javascript
解决vue router使用 history 模式刷新后404问题
Jul 19 Javascript
基于JS实现移动端左滑删除功能
Jul 28 Javascript
jQuery Collapse1.1.0折叠插件简单使用
Aug 28 jQuery
关于jQuery里prev()的简单操作代码
Oct 27 jQuery
详解vue beforeEach 死循环问题解决方法
Feb 25 Javascript
使用Vue-scroller页面input框不能触发滑动的问题及解决方法
Aug 08 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
中篇:安装及配置PHP
2006/12/13 PHP
Discuz 6.0+ 批量注册用户名
2009/09/13 PHP
php+iframe实现隐藏无刷新上传文件
2012/02/10 PHP
PHP上传Excel文件导入数据到MySQL数据库示例
2016/10/25 PHP
火狐浏览器(firefox)下获得Event对象以及keyCode
2008/11/13 Javascript
如何将JS的变量值传递给ASP变量
2012/12/10 Javascript
EasyUI中实现form表单提交的示例分享
2015/03/01 Javascript
JS基于面向对象实现的放烟花效果
2015/05/07 Javascript
JavaScript中获取Radio被选中的值
2015/11/11 Javascript
JavaScript 实现的 zip 压缩和解压缩工具包Zip.js使用详解
2015/12/14 Javascript
手机端实现Bootstrap简单图片轮播效果
2016/10/13 Javascript
浅谈angularJS的$watch失效问题的解决方案
2017/08/11 Javascript
详解React Native开源时间日期选择器组件(react-native-datetime)
2017/09/13 Javascript
Express系列之multer上传的使用
2017/10/27 Javascript
elementUI 设置input的只读或禁用的方法
2018/10/30 Javascript
layui字体图标 loading图标静止不旋转的解决方法
2019/09/23 Javascript
vue fetch中的.then()的正确使用方法
2020/04/17 Javascript
Vue 的 v-model用法实例
2020/11/23 Vue.js
[02:20]DOTA2中文配音宣传片
2013/05/22 DOTA
Python实现对excel文件列表值进行统计的方法
2015/07/25 Python
Python实现备份MySQL数据库的方法示例
2018/01/11 Python
Flask和Django框架中自定义模型类的表名、父类相关问题分析
2018/07/19 Python
基于python实现简单日历
2018/07/28 Python
Python Numpy库安装与基本操作示例
2019/01/08 Python
Python使用正则表达式分割字符串的实现方法
2019/07/16 Python
Django中提示消息messages的设置方式
2019/11/15 Python
微软日本官方网站:Microsoft日本
2017/11/26 全球购物
西班牙用户之间买卖视频游戏的平台:Wakkap
2020/03/21 全球购物
《会走路的树》教后反思
2014/04/19 职场文书
城管综合整治方案
2014/05/01 职场文书
车辆转让协议书
2014/09/24 职场文书
党员对照检查剖析材料
2014/10/13 职场文书
死亡诗社观后感
2015/06/05 职场文书
2016年敬老月活动总结
2016/04/05 职场文书
2019年世界儿童日宣传标语
2019/11/22 职场文书
Pandas 数据编码的十种方法
2022/04/20 Python