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代码
Jan 01 Javascript
JQuery性能优化的几点建议
May 14 Javascript
JavaScript常用脚本汇总(二)
Mar 04 Javascript
AngularJS入门教程中SQL实例详解
Jul 27 Javascript
Javascript获取background属性中url的值
Oct 17 Javascript
js实现前端分页页码管理
Jan 06 Javascript
用jQuery实现圆点图片轮播效果
Mar 19 Javascript
Angular 4依赖注入学习教程之InjectToken的使用(八)
Jun 04 Javascript
JavaScript模板引擎实现原理实例详解
Dec 14 Javascript
leaflet加载geojson叠加显示功能代码
Feb 21 Javascript
深入webpack打包原理及loader和plugin的实现
May 06 Javascript
不依任何赖第三方,单纯用vue实现Tree 树形控件的案例
Sep 21 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 智能404跳转代码,适合换域名没改变目录的网站
2010/06/04 PHP
php 读取文件头判断文件类型的实现代码
2013/08/05 PHP
php+mysql+jquery实现日历签到功能
2017/02/27 PHP
js 字符串操作函数
2009/07/25 Javascript
设为首页加入收藏兼容360/火狐/谷歌/IE等主流浏览器的代码
2013/03/26 Javascript
由点击页面其它地方隐藏div所想到的jQuery的delegate
2013/08/29 Javascript
[原创]SyntaxHighlighter自动识别并加载脚本语言
2017/02/07 Javascript
详解Vue生命周期的示例
2017/03/10 Javascript
vue.js 左侧二级菜单显示与隐藏切换的实例代码
2017/05/23 Javascript
Vue实例中生命周期created和mounted的区别详解
2017/08/25 Javascript
Vue项目数据动态过滤实践及实现思路
2018/09/11 Javascript
JavaScript数据结构与算法之检索算法示例【二分查找法、计算重复次数】
2019/02/22 Javascript
详解JSON和JSONP劫持以及解决方法
2019/03/08 Javascript
vue中使用props传值的方法
2019/05/08 Javascript
微信小程序云开发 生成带参小程序码流程
2019/05/18 Javascript
通过js示例讲解时间复杂度与空间复杂度
2019/08/06 Javascript
详解小程序如何动态绑定点击的执行方法
2019/11/26 Javascript
vscode 配置vue+vetur+eslint+prettier自动格式化功能
2020/03/23 Javascript
vue将data恢复到初始状态 && 重新渲染组件实例
2020/09/04 Javascript
[06:06]2018DOTA2亚洲邀请赛主赛事第四日战况回顾 全明星赛欢乐上演
2018/04/07 DOTA
Python新手在作用域方面经常容易碰到的问题
2015/04/03 Python
在MAC上搭建python数据分析开发环境
2016/01/26 Python
pycharm设置鼠标悬停查看方法设置
2019/07/29 Python
python 实现从高分辨图像上抠取图像块
2020/01/02 Python
python不到50行代码完成了多张excel合并的实现示例
2020/05/28 Python
keras读取训练好的模型参数并把参数赋值给其它模型详解
2020/06/15 Python
解决Pymongo insert时会自动添加_id的问题
2020/12/05 Python
Servlet的实例是在生命周期什么时候创建的?配置servlet最重要的是什么?
2012/05/30 面试题
建筑工程自我鉴定
2013/10/18 职场文书
《中华少年》教学反思
2014/02/15 职场文书
媒矿安全生产承诺书
2014/05/23 职场文书
学校副校长四风对照检查材料整改措施
2014/09/25 职场文书
将Python代码打包成.exe可执行文件的完整步骤
2021/05/12 Python
vue+elementui 实现新增和修改共用一个弹框的完整代码
2021/06/08 Vue.js
JavaScript高级程序设计之基本引用类型
2021/11/17 Javascript
什么是Python装饰器?如何定义和使用?
2022/04/11 Python