node使用http模块

文章目录


前言

提示:这里可以添加本文要记录的大概内容:


一、创建http服务

javascript 复制代码
// 1:导入http模块
const http = require('http')

// 2:创建服务器
//  req  request    请求对象    存储请求的报文信息(请求路径,方法,参数)
//  res  response   响应对象     负责响应客户端的数据
const serve = http.createServer((req, res) => {
    res.end('hello word')
})

// 3:监听端口,启动服务
/**
* 参数说明
* @param {type}  port  端口号
* @param {type}  hostname(非必填) 主机号(ip地址) 不写默认是本机ip
        *ip 网线在网络中的唯一地址 ,(相当于是人的身份证)
        端口号 每一个电脑都有很多应用程序,而每个应用程序都有一个编号称之为端口号,识别是哪个应用程序发送的请求
* @param {type}  callback 回调函数
*/
serve.listen(9000, () => {
    console.log('服务器已经启动了');
})

二、设置http的响应报文

javascript 复制代码
// 1:导入http模块
const http = require('http')

const serve = http.createServer((req, res) => {
    // 1:设置响应体(重点)
    // 注意点:rep.end()只能响应字符串和二进制两种数据,否则程序会出错
    //(1)如果想返回对象类型,转成json字符串
    //(2)end方法一次只能响应一个
    res.end(JSON.stringify({
        name:'张三',
        age:18
    }));
    // 2:设置响应状态码
    res.statuseCode = 209;
    // 3:设置响应状态的描述
    res.statusMessage = '描述'
    // 4:设置响应头
    res.setHeader('header')
    
})

serve.listen(9000, () => {
    console.log('服务器已经启动了');
})

三、不同请求响应不同数据

注意点:解决乱码问题:res.setHeader('Content-Type','text/plain;charset=utf8');

javascript 复制代码
// 1:导包
const http = require('http');
// 2:创建服务器
const server = http.createServer((req, res) => {
    console.log(req.url);
    if (req.url == '/') {
        // 解决乱码问题
        res.setHeader('Content-Type','text/plain;charset=utf8');
        res.end('首页')
    } else if (req.url == 'index') {
        res.setHeader('Content-Type','text/plain;charset=utf8');
        res.end('首页')
    } else if (req.url == 'login') {
        res.setHeader('Content-Type','text/plain;charset=utf8');
        res.end('登录成功')
    }
})

server.listen(9000, () => {
    console.log('服务器开启成功');
})


四、请求响应不同html文件

1. 添加www文件夹

文件夹中加上index.html、login.html、404.html文件

2. js代码

javascript 复制代码
// 1:导包
const fs = require('fs');
const http = require('http');
const path = require('path');
// 2:创建服务器
const server = http.createServer((req, res) => {
    console.log(req.url);
    if (req.url == '/' || req.url == '/index') {
        // 拼接绝对路径
        fs.readFile(path.join(__dirname, 'www', 'index.html'), (err,data)=> {
            if (err) {
                throw err;
            } else {
                // 解决乱码问题
                res.setHeader('Content-Type','text/plain;charset=utf8');
                res.end(data)
            }
        })
    } else if (req.url == '/login') {
        fs.readFile(path.join(__dirname, 'www', 'login.html'), (err,data)=> {
            if (err) {
                throw err;
            } else {
                // 解决乱码问题
                res.setHeader('Content-Type','text/plain;charset=utf8');
                res.end(data)
            }
        })
    } else{
        fs.readFile(path.join(__dirname, 'www', '404.html'), (err,data)=> {
            if (err) {
                throw err;
            } else {
                // 解决乱码问题
                res.setHeader('Content-Type','text/plain;charset=utf8');
                res.end(data)
            }
        })
    }
})

server.listen(9000, () => {
    console.log('服务器开启成功');
})

3. 效果

五、get和post请求的区别

(1)作用:get主要用来获取数据,post用来提交数据。

(2)参数位置:get参数在url后面,post在请求体里面。

(3)安全性:由于get参数在url上会暴露,所以post更安全。

(4)请求限制:get一般为2k,post没有限制。

相关推荐
2501_9151063217 分钟前
HTTP 协议详解,HTTP 协议在真实运行环境中的表现差异
网络·网络协议·http·ios·小程序·uni-app·iphone
roman_日积跬步-终至千里1 小时前
【Starrocks】StarRocks 排错:`Invalid method name: ‘heartbeat‘`(BE 心跳端口/协议错误)
服务器·网络·php
松涛和鸣2 小时前
34、 Linux IPC进程间通信:无名管道(Pipe) 和有名管道(FIFO)
linux·服务器·c语言·网络·数据结构·数据库
叽里咕噜怪2 小时前
Ansible Playbook 从入门到精通:零基础玩转自动化部署与配置管理
网络·自动化·ansible
小虾米vivian2 小时前
dmetl5 web管理平台 监控-流程监控 看不到运行信息
linux·服务器·网络·数据库·达梦数据库
老蒋新思维2 小时前
创客匠人:从个人IP到知识变现,如何构建可持续的内容生态?
大数据·网络·人工智能·网络协议·tcp/ip·创客匠人·知识变现
老蒋新思维2 小时前
创客匠人洞察:从“个人品牌”到“系统物种”——知识IP的终极进化之路
网络·人工智能·网络协议·tcp/ip·重构·创客匠人·知识变现
lin张2 小时前
Ansible学习总结:从基础命令到Playbook实战
网络·学习·ansible
我是小邵2 小时前
“域名托管”和“SSL 证书缺失”是什么关系?
网络·网络协议·ssl
Henry Zhu1232 小时前
VPP中ACL源码详解第六篇:多核和性能优化实现以及调试与观测
运维·网络·网络协议·计算机网络·性能优化