使用node.js容器运行接口demo
docker pull node
docker run -itd --name node-test -p IPa:IPb node
IPa是虚机对外暴露的端口,IPb是node.js服务监听的端口。
-i 表示打开STDIN,用于控制台交互
-t 表示分配tty设备,支持终端登录
-d 表示后台运行,不会占据你的shell前台导致无法输入命令
server.js
参考 https://blog.csdn.net/qq_34759481/article/details/103598895
这样行:
var http = require('http');
var fs = require('fs');
http.createServer((req,res)=>{
var url = req.url;
if (url === '/getcode') {
fs.readFile('./data.json',(err, data)=>{
if(err){
res.write("server error\n");
res.end();
}else{
res.write(data);
res.end()
}
});
} else {
res.write("api error\n");
res.end();
}
}).listen(8080)
这样不行。
var http = require('http');
var fs = require('fs');
http.createServer((req,res)=>{
var url = req.url;
if (url === '/getcode') {
fs.readFile('./data.json',(err, data)=>{
if(err){
res.write("server error\n");
}else{
res.write(data);
}
});
} else {
res.write("api error\n");
}
res.end();
}).listen(8080)
这种的能收到api error,收不到data。
请求 IP:8080/getcode之前
容器内运行的指令需要是script目录下 node server.js &
不能是node …/…/server.js,不然可能./data.json的.指代不明导致返回server error
加上 &保持后台运行比较好
http、fs模块是node原生镜像自带模块。
也可以基于express模块开发,但express模块不是自带的,需要自己解决。
data.json
{
"code" : "0000"
}