【Node.js工程师养成计划】之原生node开发web服务器

2024-04-29 10:52

本文主要是介绍【Node.js工程师养成计划】之原生node开发web服务器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述

一、使用node创建http服务器

在这里插入图片描述

var http = require('http');// 获取到服务器实例对象
var server = http.createServer()
server.listen(8080, function() {console.log('http://127.0.0.1:8080');
})server.on('request', function(req, res){console.log('request');res.write('66666666888') // 响应数据res.end() // 断开服务器
})

二、服务器响应不同数据类型

var http = require('http');// 获取到服务器实例对象
var server = http.createServer()
server.listen(8080, function() {console.log('http://127.0.0.1:8080');
})server.on('request', function(req, res){console.log('request');res.setHeader('Content-type', 'text/plain;charset=utf-8')res.write('你好')res.end() // 断开服务器
})

在这里插入图片描述

var http = require('http');// 获取到服务器实例对象
var server = http.createServer()
server.listen(8080, function() {console.log('http://127.0.0.1:8080');
})server.on('request', function(req, res){console.log('request');// res.setHeader('Content-type', 'text/plain;charset=utf-8')res.setHeader('Content-type', 'text/html;charset=utf-8')res.write('<h1>你好</h1>')res.end() // 断开服务器
})

在这里插入图片描述

var http = require('http');
var fs = require('fs')// 获取到服务器实例对象
var server = http.createServer()
server.listen(8080, function() {console.log('http://127.0.0.1:8080');
})server.on('request', function(req, res){if (req.url == '/') {fs.readFile('./index.html', 'utf-8', function(err, data){res.write(data)res.end()})} else {fs.readFile('./aa.jpg', function(err, data){res.end(data)})}})

在这里插入图片描述

三、http不同请求方法处理

在这里插入图片描述

var http = require('http');
var fs = require('fs')
var url = require('url')// 获取到服务器实例对象
var server = http.createServer()
server.listen(8080, function() {console.log('http://127.0.0.1:8080');
})server.on('request', function(req, res){console.log(11,req.method)if (req.method === 'GET') {console.log(url.parse(req.url, true).query.id)if (req.url == '/') {fs.readFile('./index.html', 'utf-8', function(err, data){res.write(data)res.end()})} else {fs.readFile('./aa.jpg', function(err, data){res.end(data)})}} else if (req.method === 'POST') {}
})

四、接收处理post消息数据

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><h1>你好啊 zm</h1><img src="./aa.jpg" alt="" width="50" height="50"><div><form action="./" method="post"><input type="text" name="username"> <br><input type="text" name="age"><input type="submit" value="post提交"></form></div>
</body>
</html>
var http = require('http');
var fs = require('fs')
// var url = require('url')// 获取到服务器实例对象
var server = http.createServer()
server.listen(8080, function() {console.log('http://127.0.0.1:8080');
})server.on('request', function(req, res){console.log('method:',req.method)if (req.method === 'GET') {// console.log(url.parse(req.url, true).query.id)if (req.url == '/') {fs.readFile('./index.html', 'utf-8', function(err, data){res.write(data)res.end()})} else {fs.readFile('./aa.jpg', function(err, data){res.end(data)})}} else if (req.method === 'POST') {// 请求体中var data = ''req.on('data', function(d){data+=dconsole.log(d)})req.on('end', function(){console.log(require('querystring').parse(data))})}
})

在这里插入图片描述

在这里插入图片描述

五、服务器代码模块拆分

server.js

var http = require('http');
var fs = require('fs')
// var url = require('url')
var router = require('./router')// 获取到服务器实例对象
var server = http.createServer()
server.listen(8080, function() {console.log('http://127.0.0.1:8080');
})server.on('request', function(req, res){// console.log('request');// // res.setHeader('Content-type', 'text/plain;charset=utf-8')// res.setHeader('Content-type', 'text/html;charset=utf-8')// res.write('<h1>你好</h1>')// res.end() // 断开服务器console.log('method:',req.method)router(req, res)
})

router.js

var fs = require('fs')
var controller = require('./controller')module.exports = (req, res) => {if (req.method === 'GET') {// console.log(url.parse(req.url, true).query.id)if (req.url == '/') {controller.index(res)} else {fs.readFile('./aa.jpg', function(err, data){res.end(data)})}} else if (req.method === 'POST') {// 请求体中var data = ''req.on('data', function(d){data+=dconsole.log(d)})req.on('end', function(){controller.user(require('querystring').parse(data))})}
}

controller.js

var fs = require('fs')module.exports = {index(res){fs.readFile('./index.html', 'utf-8', function(err, data){res.write(data)res.end()})},user(postData, res){// 业务逻辑代码console.log(postData)}
}

这篇关于【Node.js工程师养成计划】之原生node开发web服务器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/945885

相关文章

抖音短视频矩阵系统技术源头/源代码开发部署/SaaS贴牌/源码api代开发

一. 核心功能概述 1. **批量视频生成**:系统能够在短时间内生成大量视频,帮助商家快速制作出适合在短视频平台上推广的内容。 2. **全行业覆盖**:适用于多个行业,提供垂直的拍摄脚本和爆款视频引流解决方案。 3. **AI技术应用**:利用AI技术进行视频剪辑,提高视频原创性和过审率,同时减少重复度,保证视频素材的多样性。 4. **多平台多账号管理**:支持在多个短视频平台上

在Qt开发环境中qmake和cmake的区别优势

在Qt开发环境中,qmake和cmake都是常用的构建系统,它们各有优势和特点,适用于不同的开发需求。了解它们之间的区别可以帮助开发者选择最适合自己项目的工具。 qmake qmake是Qt自带的构建工具,它非常适合用于标准的Qt项目。它通过简单的.pro文件来管理项目设置,这种方式非常适合小到中等规模的项目。 优势: 紧密集成: 作为Qt框架的一部分,qmake在与Qt相关的库和项目中提

【Android开发经验】我们要友好的告诉用户,程序要崩溃了

原帖地址:http://blog.csdn.net/zhaokaiqiang1992 虽然我们的程序在正式上线之前,都会经过严格的测试,从而保证程序的健壮性和良好的用户体验,但是,一个人的测试或者是几个人的测试团队,都不能和上万甚至数十万的用户相比。因此,前期刚上线的程序在用户手里被玩崩了,也是很常见的事,但是,如果我们不做特殊处理,系统自带的程序崩溃提示真的太吓人了,用户看到之后会

爬虫-js设计知识点

js方法调用 function aa() {console.log('123')}//方式一aa()//方式二 0是权重(0,aa)();//方式三t = {x:aa}t['x']()

云服务器 centos mysql搭建

云服务器 centos mysql搭建 最近一直在搭建服务器,mysql遇到了一些安装的问题,总结下,免得总是百度找资料。 1.下载mysql的repo源 wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm 2.安装mysql-community-release-el7-5.noarch.rpm包 sud

JavaWeb之抓包之旅(三) :HttpClient封装工具类

谈到httpClient相信大家都不陌生,网上也有一大推别人总结的。HttpClient是Apache Jakarta Common下的子项目,用来提供高效的、最新的、功能丰富的支持HTTP协议的客户端编程工具包,并且它支持HTTP协议最新的版本和建议。 详细请参考文档:HttpClient 我们在对数据进行请求的时候经常使用。 前不久在做一个百度地图定位的(通过GPS判断你在某个学校,但

JavaWeb之抓包之旅(二) :抓包工具

谈到抓包工具,我们很多的浏览器都内置了抓包工具,还有很多优秀的插件,这里我用到的是:charles。(当我说到这个工具的时候,你可能会,哦,原来是这个啊,网上也有一堆教程,但是这里我想用多个例子来示例)。 至于Charles的安装说明,请看链接:charles使用教程指南 接下来我就来讲3个实例:(记得Charles代理得开,手机抓包时,wifi设置代理) 第一我们来抓今日头条网页的一个新闻

JavaWeb之抓包之旅(一)

JavaWeb 抓包之旅(一) :Http协议 注:http协议,我是从网上总结出来 首先来看看界面吧 再来看看抓包的界面(暂时不要问我用的什么工具,我们慢慢来) 先看请求报头 我们来分析看看: 我只知道POST请求 地址default/2.aspx Http1.1(持久连接)Host:指定请求资源的Intenet主机和端口号,必须表示请求url的原始服务器或网关的位置。HT

JS判定空值null以及未定义值undefined

判定空值 var exp = null;if (!exp){alert("is null");}  判定未定义 var exp = undefined; if (typeof(exp) == "undefined"){alert("undefined");}

按下鼠标进行拖拽,让元素跟随鼠标进行移动,鼠标抬起,元素停止移;js鼠标拖拽 (鼠标按下事件:onmousedown、鼠标移动事件:onmousemove、鼠标抬起事件:onmouseup)

需求如下: 按下鼠标进行拖拽,让元素跟随鼠标进行移动,鼠标抬起,元素停止移动。 解析: 鼠标按下事件:onmousedown 鼠标移动事件:onmousemove 鼠标抬起事件:onmouseup <!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible"