nodejs创建服务端 | 青训营笔记

77 阅读3分钟

这是我参与「第五届青训营」笔记创作活动的第 10 天

前言

对于一名前端工程师而言,nodejs几乎是每一天开发都要打交道的东西,node常用于后端开发,因为其语法与环境与前端JS类似,而被前端工程师广泛用于开发后端服务器或者是客户端测试。本篇文章将简单介绍如何使用nodejs开发一个简单的服务器应用。

node服务端

1. 普通的服务端应用

使用node来创造一个简单的服务端的应用其实很简单,需要我们用到node内置的http包,http上提供了相应的方法来帮助我们创建一个服务端的应用

在http工具包中,我们导入后需要用到http.createServer这一方法,这个方法会帮助我们创建一个服务,另外还需要用到server.listen,这一方法会让服务端监听在某一个指定的url的端口上,当监听的对象发送了请求,即可截获请求并且做相应的处理,代码如下

//这是创造一个简单的http服务端应用
const http = require('http')
//3000端口上监听
const port = 3000

const server = http.createServer((req, res) => {
    res.end('hello world')
})

server.listen(port, () => {
    console.log('server listen on: http://127.0.0.1:3000')
})

在使用运行此文件后会“卡住”,出现这样的情况是因为我们成功开启了服务器的监听,会监听在指定的端口,等待请求信息的发出。

例如在上述的代码运行后,当我们打开对应的url(127.0.0.1:3000),就会在浏览器的页面上显示出hello world,这是因为我们调用了res.end方法,这个方法会作为响应体返回一段指定的内容。

2. 创建一个可读写的服务端应用

相比于第一个简单的服务端应用,第二个应用提供了一定的方法可以读取对应的文件并且写入该文件,将读取到的文件展示出来,简单来说,就是读取一个文件同时返回到浏览器中,使浏览器返回指定的信息,代码如下

const http = require('http')
const fs = require('fs')
const path = require('path')
const url = require('url')

const folderPath = path.resolve(__dirname, './static')

const server = http.createServer((req, res) => {
    //expected: http://localhost:3000/index.html
    const info = url.parse(req.url)

    //static/index.html
    const filePath = path.resolve(folderPath, './' + info.path)

    console.log('filePath is:', filePath)

    //stream api...
    const fileStream = fs.createReadStream(filePath)
    fileStream.pipe(res)
})

const port = 3000


server.listen(port, () => {
    console.log('server listen on: http://127.0.0.1:3000/index.js')
})

与第一个文件不同的是,我们新引入了几个模块,例如fs(filesystem)pathurl

第一个模块fs,是与文件处理相关的模块,我们使用了fs.createReadStream() 方法,这个方法如同名字所示,是创建一个文件的可读流,文件中指定的是一个目录可以读取指定目录底下的文件;另外一个使用到的方法是pipe方法,这一方法就像一个水管,他把我们的可读流写入到了res中,再由res将指定的文件输出出去

第二个模块path,使用了一个方法就是resolve,这一方法们可以帮助我们组合文件的路径

第三个模块url就更简单了,单纯看代码也能知道parse方法可以帮助我们解析出请求的url

总结

以上就是使用node创建的两个简单的服务端的应用,整个node是一个很庞大的体系,其中的创建服务器只是一个很简单但是很重要的一个部分,一个优秀的前端开发工程师需要深度的理解node,在后面的代码开发中会更加得心应手。另外青训营的老师针对node部分做出了很详细的讲解,非常深刻的一门课程。