首页 > 其他分享 >Nond.Js基础(2)——请求响应与HTTP协议

Nond.Js基础(2)——请求响应与HTTP协议

时间:2024-08-26 18:22:14浏览次数:12  
标签:Nond HTTP 请求 url res req Js let http

目录


一、请求响应与HTTP协议

1、创建web服务器 

2、请求与响应

1、req

2、res

3、根据不同url地址处理请求:

3、HTTP协议

请求报文:

get类型接口:

post类型接口:

 响应报文:


一、请求响应与HTTP协议

1、创建web服务器 
//引入模块
const http = require('http');
//http.createServer()搭建web服务器
let app=http.createServer((req, res) => {
//req请求;全称(request)
//res响应;全称(resposne)
    console.log(req.connection.remoteAddress);
    res.write('响应还未结束')
   
    res.end('ok')
})
//启动服务器
//监视3000端口
app.listen(3000,() => {
    console.log('server run port 3000')  
})
//在终端输入node 文件名.js
//启动成功后,可以在浏览器访问127.0.0.1:3000

我们用http.createServer()创建一个http服务


2、请求与响应

((req, res) => {}这是匿名函数,这个函数充当回调函数,当有http请求时,这个函数会自动被调用。这里两个参数。第一个参数表示来自客户端浏览器的请求,第二个参数用来设置对本次请求的响应。函数的形参名并不重要,但是一般使用req(resposne)和res(request)表示。

当某个客户端来请求这个服务器时,这个函数会自动调用,同时会自动给这两个参数赋值。第一个参数中包括本次请求的信息。


1、req

req : 请求

req.url :本次请求的地址

req.method :获取请求行中的请求方法

req.headers :获取请求头


2、res

第二个参数用来设置本服务器对这次请求的处理。这个参数一般命名是res,它是一个对象,其中有很多方法和属性。

res.end() :把本次的处理结果返回给客户端浏览器,如果没有,客户端浏览器就收不到响应。
res.setHeader() :设置响应头,比如设置响应体的编码

比如这种乱码问题,res.setHeader() 设置响应头可以解决。

const http = require('http');
const path = require('path');
const fs = require('fs');

let app = http.createServer((req, res) => {
    let { url, method, headers } = req;
    url = url.toLowerCase();
    console.log(url);
    if (url === "/") {

        //响应头
        res.setHeader('Content-Type', 'text/html;charset=utf-8');

        res.end('访问个毛线')
    }
    else {
        let html404 = fs.readFileSync(path.join(__dirname, './public/index404.html'));
        res.statusCode = 404;
        res.end(html404);
    }
});
app.listen(3000, () => {
    console.log('Server run port 3000');
});

 

3、根据不同url地址处理请求:

例:

const http = require('http');
const path = require('path');
const fs = require('fs');

let app = http.createServer((req, res) => {
    let { url, method, headers } = req;
    console.log(headers);
    url = url.toLowerCase();
    console.log(url);
//请求地址"/"或"index.html"
    if (url === "/" || url === "/index.html") {
        let html = fs.readFileSync(path.join(__dirname, './public/index.html'));
        res.end(html);
    }
//请求地址"test"
    else if (url === "/test") {
        //响应头
        res.setHeader('Content-Type', 'text/html;charset=utf-8');
        res.end('访问个毛线')
    }
    else {
        let html404 = fs.readFileSync(path.join(__dirname, './public/index404.html'));
        res.statusCode = 404;
        res.end(html404);
    }
});
app.listen(3000, () => {
    console.log('Server run port 3000');
});

 

3、HTTP协议

HTTP(全称:HyperText Transfer Protocol)超文本传输协议规定了如何从网站服务器传输超文本到本地浏览器,基于客户端服务器架构工作,是客户端和服务器端请求和应答的标准。


 

请求报文:

请求方式:(get请求数据、post发送数据 、...)(可以下载postman,API调试工具,更方便)


 

get类型接口:

参数被放置在浏览器地址栏中, 例如:

http://localhost:3000/?name=zhangsan&age=20

参数获取需要借助系统模块url,url模块用来处理url地址

例:

const http = require('http');
const path = require('path');
const URL = require('url');
const qs = require('querystring')
let app = http.createServer((req, res) => {
    let { url, method } = req;
    let { pathname,query} = URL.parse(url);
    if (pathname === '/news' && method === 'GET') {
        let {id}=qs.parse(query)
        let news = {
            list:[
                { id: 1, msg: '11111111111111111111111111' },
                { id: 2, msg: '22222222222222222222222222' },
                { id: 3, msg: '33333333333333333333333333' }
            ]
        }
        for(let i=0; i<news.list.length; i++){
            if(news.list[i].id == id){
                res.end(JSON.stringify(news.list[i]));
                return;
            }
        }
        res.end(JSON.stringify({err:true,msg:'id不存在'}));
    }
    else {
        res.statusCode = 404;
        res.end('Not Found');
    }
})
app.listen(3000, () => {
    console.log('Server run port 3000');
})


post类型接口:

在发post请求时,传递的数据会在请求体中,也是字符串格式,并且是一点一点上传到web
服务器的,每上传一部分就会触发data事件,而最后全部上传完成之后,会触发end事件。

使用querystring将参数转换为对象格式(解析参数)

const http = require('http');
const path = require('path');
const URL = require('url');
const qs = require('querystring')
let app = http.createServer((req, res) => {
    let { url, method } = req;
    let { pathname, query } = URL.parse(url);
    if (pathname === '/news' && method === 'POST') {
        let data = '';
        req.on('data', (chunk) => {
            data += chunk;
        })
        req.on('end', () => {
            let { id } = qs.parse(data);
            let news = {
                list: [
                    { id: 1, msg: '11111111111111111111111111' },
                    { id: 2, msg: '22222222222222222222222222' },
                    { id: 3, msg: '33333333333333333333333333' }
                ]
            }
            for (let i = 0; i < news.list.length; i++) {
                if (news.list[i].id == id) {
                    res.end(JSON.stringify(news.list[i]));
                    return;
                }
            }
            res.end(JSON.stringify({ err: true, msg: 'id不存在' }));

        })
    }
    else {
        res.statusCode = 404;
        res.end('Not Found');
    }
})
app.listen(3000, () => {
    console.log('Server run port 3000');
})


 响应报文:

(HTTP状态码)

  • 200 请求成功
  • 404 请求资源没找到
  • 403 禁止请求
  • 500 服务器端错误
  • 400 客户端错误

例:

状态200,请求成功


标签:Nond,HTTP,请求,url,res,req,Js,let,http
From: https://blog.csdn.net/weixin_68856615/article/details/141500789

相关文章

  • Node.Js基础——安装及模块
    一、什么是Node.Js?Node.js是一个开源和跨平台的JavaScript运行时环境。它让JavaScript可以脱离浏览器端,在服务器端运行,让javaScript可以开发后端程序,实现了大部分其他后端语言的功能。 Node.js建立在GoogleChromeV8JavaScript引擎之上,主要用于创建网络服务器-但......
  • 基于nodejs+vue办公系统[程序+论文+开题]-计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着企业规模的不断扩大与业务复杂性的增加,传统的办公模式已难以满足高效、便捷的管理需求。在现代企业中,办公系统的智能化与集成化成为提升工作效率、优化......
  • 基于nodejs+vue办公物资管理系统[程序+论文+开题]-计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着企业规模的不断扩大与业务复杂度的提升,办公物资管理成为企业日常运营中不可或缺的一环。传统的手工记录与人工管理方式已难以满足现代企业对效率、准确......
  • 基于nodejs+vue办公室资产登记系统[程序+论文+开题]-计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着现代企业规模的扩大与管理的精细化,办公室资产管理成为了一项日益复杂且重要的任务。传统的手工记录或简单的电子表格管理方式已难以满足高效、准确、实......
  • 【跨域问题解决】Access to XMLHttpRequest at xxx from origin xxx has been blocked
    这个错误是由于浏览器的同源策略(CORS,Cross-OriginResourceSharing)导致的。当从一个源(origin)向另一个源请求资源时,如果这两个源的协议、域名或端口号不同,就会触发CORS策略。解决方法要解决这个问题,你需要在你的后端服务中添加CORS支持,以便它允许来自你的请求。这通常......
  • JS实现对象只复制已存在的属性
    JavaScript实现只复制已存在属性的笔记在JavaScript中,如果需将一个对象的属性复制到另一个对象中,但只复制目标对象中已经存在的属性,可以使用以下几种方法:1.手动遍历属性通过遍历source对象的属性,并判断target对象中是否存在对应属性,决定是否进行复制。constsource=......
  • UE5蓝图 离线实时语音转文字插件 教程 c/c++插件 毫秒级响应 比http更节约资源
    UE5蓝图实现离线实时语音转文字插件教程如何用UE5蓝图实现离线实时语音转文字,实时接收麦克风音频并且快速的转换成文字。那么我来分享一下ez2txt这个插件。bilibili使用教程效果展示:蓝图:只要启动麦克风就可以了,其他的繁琐步骤插件都封装好了。参数说明Rule1_m......
  • net.sf.json.JSONObject 放入数组 坑
    publicstaticvoidmain(String[]args){com.google.gson.JsonObjectjsonObject=newcom.google.gson.JsonObject();jsonObject.addProperty("sss","[null]");com.google.gson.JsonArrayjsonArray=newcom.google.g......
  • HTML+CSS+JS 实现淘宝首页官网
    效果展示:完整代码:HTML部分:<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge"><metaname="viewport&q......
  • 网站提示505 HTTP Version Not Supported:服务器不支持请求的HTTP版本怎么办
    当遇到“505HTTPVersionNotSupported”错误时,这意味着服务器不支持客户端请求中使用的HTTP版本。这种情况通常发生在客户端尝试使用较新的HTTP版本,而服务器仅支持老版本的协议时。解决方案检查客户端使用的HTTP版本确认客户端使用的HTTP版本。如果客户端使用的是HTTP/......