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

devtools/2024/10/18 14:20:56/

在这里插入图片描述

一、使用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)}
}

http://www.ppmy.cn/devtools/29437.html

相关文章

Docker的资源控制

CPU资源控制 cgroups&#xff0c;是一个非常强大的1inux内核工具&#xff0c;他不仅可以限制被namespace隔离起来的资源&#xff0c;还可以为资源设置权、计算使用量、操控进程启停等等。所以cgroups&#xff08;Control groups&#xff09;实现了对资源的配额和度量。 cgrou…

【华为OD机试】生成哈夫曼树【C卷|100分】

【华为OD机试】-真题 !!点这里!! 【华为OD机试】真题考点分类 !!点这里 !! 题目描述 给定长度为 n 的无序的数字数组,每个数字代表二叉树的叶子节点的权值,数字数组的值均大于等于1。 请完成一个函数,根据输入的数字数组,生成哈夫曼树,并将哈夫曼树按照中序遍历输出。 …

AI智能名片商城小程序:引领企业迈向第三增长极

随着数字化浪潮的席卷&#xff0c;私域流量的重要性逐渐凸显&#xff0c;为企业增长提供了全新的动力。在这一背景下&#xff0c;AI智能名片商城系统崭露头角&#xff0c;以其独特的优势&#xff0c;引领企业迈向第三增长极。 私域流量的兴起&#xff0c;为企业打开了一扇新的销…

链表经典面试题上

目录 创作不易&#xff0c;如若对您有帮助&#xff0c;还望三连&#xff0c;谢谢&#xff01;&#xff01;&#xff01; 题目一&#xff1a;203. 移除链表元素 - 力扣&#xff08;LeetCode&#xff09; 题目二&#xff1a;206. 反转链表 - 力扣&#xff08;LeetCode&#xff…

Golang | Leetcode Golang题解之第63题不同路径II

题目&#xff1a; 题解&#xff1a; func uniquePathsWithObstacles(obstacleGrid [][]int) int {n, m : len(obstacleGrid), len(obstacleGrid[0])f : make([]int, m)if obstacleGrid[0][0] 0 {f[0] 1}for i : 0; i < n; i {for j : 0; j < m; j {if obstacleGrid[i]…

react 集成 tailwindcss

已创建的项目集成 tailwindcss 1.安装依赖 npm install tailwindcss 2. 根目录下创建文件tailwind.config.js 初始化文件 // https://unpkg.com/browse/tailwindcss3.1.6/stubs/defaultConfig.stub.js/** type {import(tailwindcss).Config} */ export default {purge: [./…

全志ARM-修改开发板内核启动日志

修改开发板内核日志输出级别&#xff1a; 默认输出级别为1&#xff0c;需要用超级用户权限修改 sudo vi /boot/orangepiEvn.txt 把第一行内核启动输出权限改为7&#xff0c;第二行把输出方式该为“serial”串口输出

鸿蒙内核源码分析(时钟任务篇)

时钟概念 时间是非常重要的概念&#xff0c;我们整个学生阶段有个东西很重要,就是校园铃声. 它控制着上课,下课,吃饭,睡觉的节奏.没有它学校的管理就乱套了,老师拖课想拖多久就多久,那可不行,下课铃声一响就是在告诉老师时间到了,该停止了让学生HAPPY去了. 操作系统也一样&…