likes
comments
collection
share

如何用koa构造优雅的端口服务

作者站长头像
站长
· 阅读数 54

前言

NodeWeb旨在为开发者提供高效的后端解决方案。基于Node.js技术栈,NodeWeb利用其非阻塞I/O和事件驱动的特性,能够轻松处理大规模并发请求,适用于构建实时应用和RESTful API。其模块化设计和丰富的npm生态系统,使开发者能够快速集成各种功能和工具,加速开发周期。NodeWeb支持跨平台部署,适用于各种操作系统,包括Windows、Linux和macOS。借助Express.js等框架,开发者可以快速搭建轻量级且高性能的Web服务器。无论是初学者还是经验丰富的开发者,NodeWeb都是一个强大且灵活的选择,推动现代Web应用的开发与部署。

1. 导入模块

const http = require('http');
const Url = require('url')
const fs = require('fs')
const path = require('path')
  1. http模块

    • 允许创建HTTP服务器和客户端。
    • 可以处理HTTP请求和响应,包括头部信息、状态码等。
    • 提供了构建基本的Web服务器和客户端的功能。
  2. url模块

    • 提供了处理URL的工具,包括解析、格式化和拼接URL。
    • 允许解析URL字符串为URL对象,并提取其各个部分,如协议、主机、路径等。
  3. fs模块

    • 提供了文件系统相关的操作,如读取文件、写入文件、修改文件、删除文件等。
    • 支持对文件和目录进行操作,如创建目录、重命名文件、获取文件状态等。
  4. path模块

    • 提供了处理文件路径的工具,能够有效地处理不同操作系统下的路径格式。
    • 包括路径解析、路径拼接、获取文件名和扩展名等操作。

2.构建服务

const server = http.createServer((req, res) => {
    const reqUrl = Url.parse(req.url)
    console.log(req.url + '5555');
    console.log(reqUrl);
    }
    server.listen(3000, () => {
    console.log('Server is running on port 3000');
})

我们获取到http对象之后采用里面的方法去构建一个web服务,然后打印里面回调函数里的参数,req代表请求,res代表响应。req.url即我们请求的地址这里是个字符串我们必须通过 Url.parse转换为真实的地址形式,转化为了真实地址之后就会打印出来一个对象。

不考虑我们后面写的响应,我们如果这样子去访问

如何用koa构造优雅的端口服务

如何用koa构造优雅的端口服务

最终的打印结果就会是这样子。因此我们如果想获取到真实的路径可以访问这个对象里的pathname属性。

3.设置响应

  if (reqUrl.pathname === '/') {
        res.writeHead(200, { 'Content-Type': 'text/html' })
        res.end('<h2>hello world</h2>')
    } 

这是我们其中的一个响应,首先如果我们直接访问端口而不加任何后缀时,我们会弹出hello world,为了让弹出的数据是html结构,我们在响应头加了响应的状态和响应类型。

 else if (reqUrl.pathname === '/user') {
        res.writeHead(200, { 'Content-Type': 'application/json' })
        res.end(JSON.stringify(data))

这里我们的data是一个自定义的数组,我们必须传入json格式否则会乱码,因此响应头也要规定好我们的响应数据格式。

else if (req.method === 'POST' && reqUrl.pathname === '/login') {
        // 拿到前端传递的参数
        // 去数据库里面校验该参数合法性
        res.end('登陆成功')

当然我们也可以规定请求的方式,必须为method才可以响应。

 else {
        const _Url = path.resolve(__dirname, 'assets/404.html')
        const content = fs.readFileSync(_Url, { encoding: 'utf8' })
        // console.log(content);
        res.end(content)
    }

我们也可以直接去响应返回我们的html文件,我们首先获取到当前文件所在文件夹的路径然后和html文件进行路径拼接,最后读到这个文件。因为响应的html文件会被自动解析,因此不需要我们去设置响应头。

4. 优雅的koa

上面的http方式必然会复杂且不优雅,因此我们引入koa和koa-router进行构建web服务。

const Koa = require('koa')
const app = new Koa()
const main = (ctx) => {
    ctx.body = 'hello world'
}

app.use(main)
app.listen(3001, () => {
    console.log('项目已经启动');
})

我们先进行一个简单的测试,这样子构建的web服务,不管我们访问的端口是什么,最终都会打印hello world。

如何用koa构造优雅的端口服务

那要是我们要设置多个响应呢?这就涉及到了koa中的路由。

我们新建立一个路由文件。

const router = require('koa-router')()

router.get('/user', (ctx) => {
    ctx.body = {
        name: '艾总',
        sex: 'boy'
    }
})

router.get('/home', (ctx) => {
    ctx.body = '艾总'
})

module.exports = router

首先引入并实例化得到一个koa对象,然后调用get方法书写响应结果,最后进行抛出。

const router = require('./router/user.js')

const Koa = require('koa')
const app = new Koa()
app.use(router.routes())

app.listen(3001, () => {
    console.log('项目已经启动');
})

然后我们去引入这个router对象,然后调用routes()方法使得所有路由生效。

最后我们的结果就会成功打印。

如何用koa构造优雅的端口服务

如何用koa构造优雅的端口服务

转载自:https://juejin.cn/post/7387992438297968640
评论
请登录