使用自己的电脑创建最基本的web服务器

153 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第4天,点击查看活动详情

1.安装node

传送门

LTS与Current版本的区别

  • LTS为长期稳定的版本
  • current为新特性尝鲜版本

创建最基本的web服务器

1.导入http文件

const http =require('http')

2.调用http.createServer()

const server = http.createServer()

3. 为服务器实例绑定request事件

在我们调用完http.createServer()方法以后呢,就创建好了一个服务器,就得为服务器绑定request事件,用来监听客户端发送过来的网络请求。

在这一步中我们需要调用".on()"方法,为服务器绑定request事件,在客户端请求我们服务器时,就回触发request事件。

server.on('request',(req,res)=>{
//只要有客户端来请求我们自己的服务器,就会触发request事件,从而调用这个事件处理函数

//req.url是客服端请求的ur地址
const url =req.url
//req.method是客服端请求的method类型
const method = req.method
const str ='发送的内容'
//设置相应头防止乱码
res.setHeader('content-Type','text/html;charset=utf-8')
//res.end()方法的作用:
//向客服端发送指定的内容,并结束这次请求的处理过程
res.end(str)
})

4.启动服务器

//调用server.listen(端口号,cb回调)方法,即可启动web服务器
server.listen(80,()=>{
console.log('')
})   

5.解决中文乱码问题

设置响应头

res.setHeader('content-Type','text/html;charset=utf-8')

根据不同的url相应不同的html地址

核心步骤:

  • 获取请求的url
  • 设置默认的响应内容为404 Not found
  • 判断用户请求是否是 / 或者 /index.html
  • 判断用户请求的是否是/about.htm
  • 设置  Content-Type响应头,防止中文乱码
  • 使用res.end()把响应内容发送给客户端
//核心代码
server.on('request', (req, res) => {
        res.setHeader('content-Type', 'text/html;charset=utf-8')
        const url = req.url
        const fpath = path.join(__dirname, url)
        fs.readFile(fpath, 'utf8', function(err, datastr) {
            if (err) {
                return res.end(content)
            } else {
                res.end(datastr)
            }
        })
//1.导入模块

const fs = require('fs')

const http = require('http')

const path = require('path')
    //2.创建web服务器
const server = http.createServer()
    //监听web服务器的request事件
server.on('request', (req, res) => {
        //只要有客户端来请求我们自己的服务器,就会触发request事件,从而调用这个事件处理函数
        //设置响应头

        res.setHeader('content-Type', 'text/html;charset=utf-8')

        //req.url是客服端请求的ur地址
        const url = req.url
            //拼接地址
        const fpath = path.join(__dirname, url)

        // 设置默认响应值为404
        let content = '404 not fund'
  
        fs.readFile(fpath, 'utf8', function(err, datastr) {

            if (err) {

                return res.end(content)

            } else {
                res.end(datastr)
            } //打印正确的结果
        })

    })

    //3. 启动服务器

server.listen(80, () => {

    console.log('启动成功')

})