文章

使用 Node.js 搭建一个本地服务器

本文主要记录了如何基于创建一个自己的 HTTP / FTP 服务器 这样能在不破坏开发环境的情况下提供稳定接口调试服务, 为自己节省大量时间

背景

详细说一下背景(写给自己, 记录一下当时情况, 可以直接看下面实操):

刚接手公司项目时, 要做一个网络文件下载/解析/本地存储/读取的功能.

这些直接依赖于公司服务器, 由于我所开发的任务是预研新功能并开发, 所以服务端并没有现成的资源供我使用, 并且当时有其他同事在对工程相关部分进行重构, 和我的开发工作有冲突.

最初我想着在项目本地内嵌一份本地 zip 资源, 模拟下载好的文件, 执行解压/解析/存储/读取等工作, 但是后面发现每次关键时刻合并代码都会有冲突, 甚至我的一些功能不能用.

之后想过用 Charles 做网络拦截 mock 数据, 后面发现应用的时候, 首页接口直接报错(怀疑是网络库用的版本过低), 随后放弃.

最终选择了自己搭建一个本地服务的方式, 通用/无侵入/可移植/简洁.

步骤

安装 Node.js 直接去官方网站 下载 Node.js, 或者直接通过下面命令安装

1
2
3
4
5
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.2/install.sh | bash
nvm install --lts

// 安装完成之后可以执行下面命令查看是否安装成功
node -v

写服务器脚本, 我命名为 server.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
var fs = require('fs')
var http = require('http')
var os = require("os");

// 监听端口号码
let portNumber = 8083

var server = http.createServer()

server.on("request", function(request, response){
    var url = request.url
    
    console.log(url)
    
    if (url === "/") {
        response.end('Hello world!')
        return
    }
    
    if (url === "/testZip.zip") {
        var name = url.substring(url.lastIndexOf('/'))
        var rs = fs.createReadStream(__dirname + "/" + name)
        
        response.writeHead(200, {
            'Content-Type': 'application/force-download',
            'Content-Disposition': 'attachment; filename=' + name
        })
        rs.pipe(response)
    }
    
    if (url === "/login") {
        response.end('Hello world!')
    }
    
});

server.listen(8083, function() {
    console.log("服务启动成功, 可以通过下面三种方式进行访问")
    console.log("通过 http://localhost:8083 进行访问")
    console.log("通过 http://" + (getIP()[0]) + ":8083 进行访问")
    console.log("通过 http://" + (getIP()[1]) + ":8083 进行访问")
})

function getIP() {
    var networkInterfaces = os.networkInterfaces();
    let {lo0, en0} = networkInterfaces

    let localMachineIP = lo0[0]["address"]
    let localNetIP = en0[1]["address"]

    return [localMachineIP, localNetIP]
}

部署

1
2
3
4
5
➜  server node server.js
服务启动成功, 可以通过下面三种方式进行访问
通过 http://localhost:8083 进行访问
通过 http://127.0.0.1:8083 进行访问
通过 http://192.168.31.71:8083 进行访问 <这个是你本机局域网地址>

调试

剩下就是根据需要自己随意指定请求接口并提供服务了, 从上面示例中可以看到我提供了一个 testZip.zip 文件供下载来服务我当前所需.

所幸, 这一套工作下来为我的工作节省了很多沟通和调试的时间.

最后

具体文件代码见 server.js


THE END.

本文由作者按照 CC BY 4.0 进行授权