服务器相关学习

本文详细介绍了Node.js中处理HTTP请求的方法,包括获取请求参数(GET和POST)、请求地址、响应报文设置。同时,讲解了内置模块url和querystring在处理参数中的应用,以及同步异步编程中的Promise和异步函数。通过实例展示了如何解决回调地狱并实现更清晰的代码结构。
摘要由CSDN通过智能技术生成

 req、res的方法

1.获取请求参数post、get

const http = require('http');
const app = http.createServer();
app.on('require',(req,res) => {
        const result = req.method;
        res.end(result);

});
app.listen(3000);
console.log('服务器启动成功');

搭建服务器,在app绑定的require事件中,回调函数的返回参数req下的method方法可以返回当前发出请求api的请求方式。

2.获取请求地址

在浏览器通过输入不同的域名获得不同响应,服务器端如何获取请求地址呢?

const url = req.url;
console.log(url)

只要使用req.url就能使服务器获取请求地址。

3.响应报文设置

浏览器会根据响应报文的内容解析响应内容,所以设置响应报文一定程度影响了页面的展示。

const http = require('http');
const app = http.createServer();
app.on('require',(req,res) => {
        res.writeHeader(200,{
               'content-type':"text/html;charset=utf8"
});

});
app.listen(3000);
console.log('服务器启动成功');

首先浏览器会看报文的状态码(200-请求成功,404-没有找到页面,500-服务器错误,400-请求代码语法错误),我们可以自己设置状态码,使用res下的writeHeader(),其第一个参数是状态码,第二个传递对象,告诉浏览器传递过来的内容类型,浏览器也会据此解析。

参数处理

1.get参数处理

当客户端传递参数,比如登录时传递姓名密码,我们怎么获取传递过来的参数呢?我们知道使用get方法传参,参数会跟在请求地址后面,而在上文提到req.url可以获取请求地址,我们再对请求地址进行操作,但这样很麻烦,所以node提供了内置模块供我们处理参数。

const http = require('http');
const url = require('url');
const app = http.createServer();
app.on('require',(req,res) => {
       const params = url.parse(req.url,true).query;
       console.log(params.name);
       console.log(params.name);

});
app.listen(3000);
console.log('服务器启动成功');

我们要用require引入url内置模块,url下有一个parse()方法,第一个参数为要处理的请求地址也就是req.url,此时它会将请求参数转为对象,但是客户端传递的参数仍为字符串,第二个参数true,便将参数转为对象形式名为query,query便是传递的参数的对象形式。

2.post参数处理

post和get不同,其传递的参数不会在请求地址后面,那我们怎么处理呢?

const http = require('http');
const url = require('url');
const querystring = require('querystring');
const app = http.createServer();
app.on('require',(req,res) => {
        let postParams = '';
        req.on('data',params => {
                postParams += params;   
});
        req.on('end',() => {
                 console.log(querystring.parse(postParams));
});
        
       
});
app.listen(3000);
console.log('服务器启动成功');

这里又要使用querystring内置模块,可以将字符串转为对象。首先浏览器在传参的时候不是全部传递,而是分批传递,所以我们给req绑定data和end事件,表示当传递数据是和传递数据结束时做的事情。传参结束后形成参数字符串形式,我们再使用querystring中的parse(),我们得到参数对象形式。

同步异步

1.promise解决回调地狱

由于异步API在调用的时候,前面执行的代码不会阻塞后面的代码,但是我们有时候后面代码的执行依赖前面代码的执行结果,我们使用回调可以实现,但是一层套一层,其代码维护性不高且复杂,于是promise诞生了,用于解决回调地狱问题。

const fs = require('fs');
const promise = new Promise((resolve,reject) => {

        fs.readFile('./zxy.txt','utf8',(err,doc) => {
            if (err!=null){
                reject(err);
            }else{
                    resolve(result);
            }
        });
});

promise.then((result) => {
    console.log(result);
}).catch((err) => {
    console.log(err);
});

原理是创建一个promise对象,它有resolve和reject两个函数对象,分别代表成功的信息和失败的信息,promise是希望将读取的数据拿到外面处理,调用promise的then和catch,then便代表成功时候,调用resolve函数,传递result接受参数。有几个文件对象我们就调用几个promise对象。

2.异步函数

进行封装,将异步代码写成同步形式,使代码不再有嵌套的形式,使代码结构更加清晰。

const fs = require('fs');
async function fn(){
        throw '发生错误';
        return zxy;
};

fn().then(function(data){
    console.log(data);
}).catch(function(err){
    console.log(err);
});

异步函数便是在普通函数前加async,此函数返回promise对象,所以结果显示仍然拿到外部用then和catch方法。除此之外,异步函数还有一个await,其功能是只有当前一个函数返回结果了才会执行后面的。

async function p1(){return 'p1'};
async function p2(){return 'p2'};
async function p3(){return 'p3'};

async function run(){
        let r1=await p1();
        let r2=await p2();
        let r3=await p3();
        console.log(r1);
        console.log(r2);
        console.log(r3);
};

但值得注意的是,await只能在异步函数中使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值