利用node搭建服务器

作用: 我们知道传统的HTPP服务器会由Aphche、Nginx、IIS之类的软件来担任,但是nodejs并不需要,nodejs提供了http模块,自身就可以用来构建服务器,而且http模块是由C++实现的,性能可靠。我们在nodejs中的教程或者书籍中常常会通过一个简易的http服务器来作为开头的学习。

createServer函数

想要用node搭建一个服务器,这个函数是首要的。注意,需要先用require引入http模块

http.createServer([option],[requestListener])
参数一 [option]:可选配置项(我们一般情况下用不上)
参数二 [requestListener] 请求监听

用一个实例来解释把。要求:请求页面发送请求给服务器,服务器判断请求的路径是否是文件、是否是目录、是否不存在该路径
directory是一个空目录,default是访问目录时跳转的页面,main是访问的路径
在这里插入图片描述
default文件内容

<h1>访问目录时</h1>

main文件内容

<h1>路径正确时</h1>

login.html文件内容

<!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>
    <button id="loginBtn">登录</button>

    <script>
        let loginBtn = document.getElementById("loginBtn");

        //利用原生js的异步操作来访问node创建的服务器
        loginBtn.onclick = function() {
            let xhr = new XMLHttpRequest();
            //在这里修改请求路径
            let url = `http://localhost:8888/direcory`;
            xhr.open("POST", url, true);
            xhr.send();
            xhr.onreadystatechange = function() {
                if(this.readyState==4 && this.status==200){
                    let rs=this.responseText;
                    console.log(rs);
                    if(rs=="file"){
                        window.location="./main.html";
                    }else if(rs=="directory"){
                        window.location="./default.html";
                    }
                }
            }
        }
    </script>
</body>

</html>

login.js文件目录

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

let server = http.createServer((request, response) => {
    //解除同源禁止策略
    response.setHeader('Access-Control-Allow-Origin', '*');
    //注意request.url所获取的是端口号后面的地址
    let urlPart=request.url;
    //通过path模板来拼接请求文件的完整路径
    let urlComplete = path.resolve(__dirname, urlPart.substring(1));
    try {
        //将异步操作变成同步,不加Sync的话,此函数便是一个异步回调函数,无法获取数据
        let file = fs.statSync(urlComplete);
        //判断指定路径是文件还是目录还是错误路径,根据类型使页面跳转到不同页面
        if(file.isFile()){
            response.write("file");
        }else if(file.isDirectory()){
            response.write("directory");
        }
    } catch (error) {
        //文件不存在时,将返回状态码定义成404
        response.statusCode="404"
        console.log("访问路径错误");
    }
    

    //结束请求
    response.end();
});

//定义监听的端口号
server.listen(8888);

拓展

在服务器中获取页面传输的参数时。需要区分get请求和post请求,不同请求的解析方式不同。

get请求

const http = require("http");
const url = require("url");//导入url模板用于解析url,获取到请求所带参数

let server = http.createServer((request, response) => {
    //利用url模板将请求的地址的信息转换成对象形式,用以获得相关内容
    let urlObj = url.parse(request.url, true);
    //用query属性获取到请求的参数
    let data = urlObj.query;

    console.log(data);
    //结束请求
    response.end();
});

//定义监听的端口号
server.listen(8888);

post请求

const http = require("http");

let server = http.createServer((request, response) => {
    let content='';
    //两个事件挂载搭配来获取
    request.on("data",chunk=>{
        content+=chunk.toString("utf-8");
    });
    request.on('end', () => {
        console.log("请求体获取完毕", content);
    })
    console.log(content);
    //结束请求
    response.end();
});

//定义监听的端口号
server.listen(8888);

html页面与node服务器交互时数据传输方式

一边情况下通过json文件传输

服务器中,先将数据转换成json文件

let rs={
    user:"admin",
    psd:"123456",
    type:""
}
response.write(JSON.stringify(rs));
页面中,利用回调函数接收数据后,将json文件转变回去

let rs=this.responseText;
let newRs=JSON.parse(rs);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值