1.基础模块/8、http - HTTP

http - HTTP

若要使用 HTTP 服务器和客户端,则可以 require('http')

最简单的一个应用:

// 1 引入模块
const http = require('http');

// 2 创建服务器
http.createServer((req, res) => {
    if(req.url === '/') {
        console.log(req.url);
        res.write('hello world!');
        res.end();}
}).listen(5000, () => {
    console.log('服务器已运行...')
})

综合应用:

// 1 引入模块
const http = require('http');
const path = require('path');
const fs = require('fs');

// 2 创建变量,存储服务器对象
const server = http.createServer((req, res) => {
    if(req.url === '/') {
        console.log(req.url);
        res.end('<h1>HOME</h1>');
    }
});

// 3 创建端口号
const PORT = process.env.PORT || 9999;  //设置PORT的环境变量

// 4 监听端口
server.listen(9999, () => {
    console.log(`服务器已经在${PORT}端口号运行...`);
});

修改代码后需要重新启动,有点繁琐,于是使用nodemon。

使用nodemon:监听代码文件的变动,当代码改变时,自动重启。

  • 安装

    npm install -g nodemon --save-dev

  • 使用

    nodemon xx.js

根据请求url的不同,返回不同的文件:

// 1 引入模块
const http = require('http');
const path = require('path');
const fs = require('fs');

// 2 创建变量,存储服务器对象
const server = http.createServer((req, res) => {
    // 加载主页
    if(req.url === '/') {
        fs.readFile(path.join(__dirname, 'public', 'index.html'), (err, data) => {
            if (err) throw err;
            res.writeHead(200, {'Content-Type': 'text/html'});
            res.end(data);
        })
    }

    //加载关于页面
    if(req.url === '/about') {
        fs.readFile(path.join(__dirname, 'public', 'about.html'), (err, data) => {
            if (err) throw err;
            res.writeHead(200, {'Content-Type': 'text/html'});
            res.end(data);
        })
    }

    // 加载Json数据
    if(req.url === '/api/users') {
        const users = [
            {name: 'Summer', age: 25},
            {name: 'Lucy', age: 28}
        ];
        res.writeHead(200, {'Content-Type': 'application/json'});
        res.end(JSON.stringify(users));
    }
});

// 3 创建端口号
const PORT = process.env.PORT || 9999;  //设置PORT的环境变量

// 4 监听端口
server.listen(9999, () => {
    console.log(`服务器已经在${PORT}端口号运行...`);
});

封装:

// 1 引入模块
const http = require('http');
const path = require('path');
const fs = require('fs');

// 2 创建变量,存储服务器对象
const server = http.createServer((req, res) => {
    //创建变量 filePath 存储文件绝对路径
    let filePath = path.join(__dirname, 'public', req.url === '/' ? 'index.html' : req.url);

    //初始化content type
    let contentType = 'text/html';

    //获取文件扩展名
    let extName = path.extname(filePath);

    //通过验证扩展名设置content type
    switch (extName){
        case '.js':
            contentType = 'text/javascript';
            break;
        case '.css':
            contentType = 'text/css';
            break;
        case '.json':
            contentType = 'application/json';
            break;
        case '.png':
            contentType = 'image/png';
            break;
        case '.jpg':
            contentType = 'image/jpg';
            break;
    }

    // 读取文件
    fs.readFile(filePath, (err, data) => {
        if (err) {
            if(err.code === 'ENOENT') {
                //没找到页面
                fs.readFile(path.join(__dirname, 'public', '404.html'), (err, data) => {
                    if (err) throw  err;
                    res.writeHead(200, {'Content-type': 'text/html'});
                    res.end(data);
                })
            }else{
                //其他浏览器错误
                res.writeHead(500);
                res.end(`服务器错误:${err.code}`);
            }
        }else{
            //成功
            res.writeHead(200, contentType);
            res.end(data, 'utf8')
        }
    })
});

// 3 创建端口号
const PORT = process.env.PORT || 9999;  //设置PORT的环境变量

// 4 监听端口
server.listen(9999, () => {
    console.log(`服务器已经在${PORT}端口号运行...`);
});
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值