小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
本文主要介绍如何使用node启动一个服务,效果等同于使用nginx、apache等启动程序,在网络相通的情况下能够被其他服务器访问。并输出所有接口供测试人员分析使用。
编写代码创建服务
以启动isui代码为例,isui文件夹下为工程打包后的前端代码。
打包注意点:由于我们期望访问的路径是localost:8082/isui, 因此打包需要配置需要配置公共路径。
- webpack配置publicPath:'/isui'
- isui项目使用的是VuePress,只需配置选项base:'/isui/'
创建config.json文件,为文件后缀名与其content-type匹配文件
创建start.js文件,改文件为node入口执行文件
工程目录结构如下:
start.js
// 引入 http 模块
let http = require("http");
// 引入 fs 模块
let fs = require("fs");
// 引入 url 模块
let url = require("url");
// 引入 path 模块
let path = require("path");
http
.createServer((req, res) => {
// 获取响应路径
let pathName = url.parse(req.url).pathname;
data[0].data.push([pathName]);
// 默认加载路径
if (pathName == "/isui") {
// 默认加载的首页
pathName = "isui/index.html";
}
// 获取文件的后缀名
let extName = path.extname(pathName);
// 过滤 /favicon.ico 的请求
/**
* 访问地址是:http://localhost:3000/?userName=jsliang&userAge=23
* 如果你执行 console.log(req.url),它将执行两次,分别返回下面的信息:
* / ?userName=jsliang&userAge=23
* / /favicon.ico
* 这里为了防止重复执行,所以排除 req.url == /favicon.ico 的情况
*/
if (pathName != "/favicon.ico") {
// 获取 08_WebService 下的 index.html
fs.readFile("./" + pathName, (err, data) => {
// 如果不存在这个文件
if (err) {
console.log("404 Not Found!");
fs.readFile("./isui/404.html", (errorNotFound, dataNotFound) => {
if (errorNotFound) {
console.log(errorNotFound);
} else {
res.writeHead(200, {
"Content-Type": "text/html; charset='utf-8'",
});
// 读取写入文件
res.write(dataNotFound);
// 结束响应
res.end();
}
});
return;
}
// 返回这个文件
else {
// 获取文件类型
let ext = getExt(extName);
console.log(ext);
// 设置请求头
res.writeHead(200, {
"Content-Type": ext + "; charset='utf-8'",
});
// 读取写入文件
res.write(data);
// 结束响应
res.end();
}
});
}
})
.listen(8082);
// 获取后缀名
getExt = (extName) => {
// readFile 是异步操作,所以需要使用 readFileSync
let data = fs.readFileSync("./config.json");
let ext = JSON.parse(data.toString());
return ext[extName];
};
config.json 通过后缀名获取对应的文件类型。
启动服务
在终端输入命令:node start.js
在浏览器中输入localhost:8082/isui,首页就出来了。