nodejs部署微服务
- 前言
- 环境
- 相关文件准备
- 安装
- 操作步骤
- 创建项目
- 运行项目
- 测试是否部署成功
- 项目管理
- 后台运行脚本
- 检查nodejs服务是否启动成功
- 退出后台nodejs的项目
- 其他
- 读取本地图片的nodejs代码
- 读取本地json文件
- 发布到公网
前言
之前基本上没怎么用过nodejs部署网站,先了解了一下,小结一下用起来很爽的几个点:
- nodejs语法只需要有js基础就可以进行后端开发
- 开发时间端、简单成本低、入门贼快、前后端交互简单、调试方便,用来学习或者小制作的首选
- 性能方面没测试过,官方说处理高并发优秀,感兴趣可以去测试一下哈
环境
相关文件准备
设备:windows10 + node-v16.15.0-x64.msi
下载链接: https://nodejs/dist/v16.15.0/node-v16.15.0-x64.msi
或选择适合的版本:https://nodejs/en/download/
安装
我这里的是windows的
1、下载好文件,例如:node-v16.15.0-x64.msi,可以双击
2、到这里需要注意一下,可以直接点next,也可以勾选后面可以少安装一些东西,然后选择安装路径就行了
3、检查安装是否成功:npm -v
操作步骤
创建项目
1、在nodejs根目录下创建一个项目组存放文件夹,我一般习惯命名是:www
2、在www中创建项目文件夹,名字是字母,按照自己习惯取就行
3、在当前目录下cmd执行:npm init,初始化项目,如果4个文件(目录)有缺少则手动创建,例如:
4、随便写一个html文件放到views目录中(第5步用),并命名为:index.html
5、编写app后端代码(js代码),创建一个js文件,如:server.js
//创建一个nodejs服务器
//设置服务器端口
var port=8084;
//导入http模块,有些模块灭有的话需要自己安装:npm install + 模块名
var http = require('http');
var fs = require('fs');
//初始化时间,用来写日志的,不加也行
function loc_time() {
var time_ = new Date();
var loc_time_ = time_.getFullYear()+"-"+(time_.getMonth()+1)+"-"+time_.getDate()+" "+time_.getHours()+":"+time_.getMinutes()+":"+time_.getSeconds()+"\t";
return loc_time_;
}
//创建app
var app = http.createServer((req,res)=>{
// req:请求对象,包含一些查询参数、请求体,请求路径,cookie 请求域..
//获取请求路径
let url = req.url;
console.log(loc_time()+'url ==> %s',url);
console.log(loc_time()+'method ==> %s',req.method);
if(url == '/'){
// 设置响应头
res.writeHead(200,{'Content-Type':'text/html;charset=utf-8'});
fs.readFile("./views/index.html","utf-8",function(err,data){
if (err){
console.log(loc_time()+"index.html loading is failed :"+err);
}else{
//返回index.html页面
// console.log(loc_time()+"");
res.end(data);
}
});
}else{
// 设置响应头
res.writeHead(200,{'Content-Type':'text/plain;charset=utf-8'});
// res :响应对象
res.end('Fatal Error');
}
});
// 监听端口
app.listen(port,()=>{
console.log(loc_time()+'the server running at http://127.0.0.1:'+port);
});
运行项目
在当前目录下cmd执行:npm start server.js
测试是否部署成功
复制:http://127.0.0.1:8084,浏览器访问是否成功
项目管理
后台运行脚本
创建见一个ANSI编码格式的vbs文件,复制下方代码保存,放在项目目录下,例如:start_server.vbs,双击运行
rem 后台运行服务脚本
dim exePath,exeDir,exeFile,ws
filename="server.js" '填服务器启动的js脚本
Set ws=WScript.CreateObject("wscript.shell")
strComputer = "."
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colProcessList = objWMIService.ExecQuery("Select * from Win32_Process Where Name = 'node.exe'")
If colProcessList.Count>0 Then
WScript.Echo "正在运行中,关闭命令:taskkill /F /IM node.exe......"
wscript.quit
Else
ws.Run "cmd /c npm start " & filename & " >> server.log",vbhide
WScript.Echo "未运行,且已重新启动"
End If
rem 验证是否启动成功
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colProcessList = objWMIService.ExecQuery("Select * from Win32_Process Where Name = 'node.exe'")
If colProcessList.Count>0 Then
WScript.Echo "重新启动成功,关闭命令:taskkill /F /IM node.exe......祝你好运"
Else
WScript.Echo "重新启动失败,请检查路径或文件名是否正确。"
End If
wscript.quit
Rem 获取server进程号
rem ws.Run 'cmd /k netstat -ano | findstr "8084" >> server.log'
检查nodejs服务是否启动成功
创建一个ANSI编码格式的bat文件,复制下方代码保存,放在项目目录下,例如:check_server_process.bat,双击运行
@echo off
netstat -ano | findstr /N /P "协议\> 8084\>"
tasklist /V | findstr /N /P "映像名称\> node.exe\>"
timeout /t 5
启动成功如下:
启动失败如下:
需要注意的是我这里的端口设置的是8084,如果不一样需要修改一下
退出后台nodejs的项目
创建一个ANSI编码格式的bat文件,复制下方代码保存,放在项目目录下,例如:stop_server.bat,双击运行
@echo off
taskkill /F /IM node.exe
timeout /t 3
其他
读取本地图片的nodejs代码
...
...
...
}else if(url.substr(0, 10) == '/views/img'){
//请求照片
fs.readFile('.'+url,(err,data)=>{
if(err){
res.setHeader('Content-Type','text/plain;charset=utf-8');
res.end('文件读取失败,请稍后重试!!!');
}else{
res.setHeader('Content-Type','image/jpeg');
res.end(data);
}
});
}else{
...
...
//请求方法:127.0.0.1:8084/views/img/test.jpg
读取本地json文件
...
...
...
}else if(url == '/json_api'){
//读取json文件
console.log(loc_time()+"读取json文件");
try{
res.writeHead(200,{
'Content-Type':'application/json;charset=utf-8',
'Access-Control-Allow-Origin':'*',
'Access-Control-Allow-Methods':'PUT,POST,GET,DELETE,OPTIONS'
});
fs.readFile("./views/mynotes/adbUrlData.json", 'utf-8', function(err, data) {
if (err) {
console.log(loc_time()+'文件读取失败');
res.end('文件读取失败');
} else {
res.end(data);
}
});
} catch (e) {
console.log(loc_time()+'读取发生错误,出现代码异常报错');
}
}else{
...
...
//请求方法:127.0.0.1:8084/views/img/test.jpg
发布到公网
内网穿透工具,这里推荐的是【花生壳】软件,会免费赠送2个域名非常方便,也可以自己购买域名挺便宜的,安装后大概就是这个样子:
选择域名编辑,可以自定映射端口,这样公网也可以访问了
配置好后可以用手机流量(不能同一个局域网)或者让朋友(不能同一个局域网)帮忙测试一下
更多推荐
零基础nodejs部署web网站
发布评论