# node_templete **Repository Path**: ElegantDevil/node_templete ## Basic Information - **Project Name**: node_templete - **Description**: node 项目模版 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-08-25 - **Last Updated**: 2025-06-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ### 服务启动 - development环境 `npm run dev` 通过nodemon管理 - production环境 `npm run prod` 通过pm2管理 ### `cross-env` 控制NODE_ENV环境变量 `npm install --save-dev cross-env`,⚠️ php脚本自动发布执行`npm run prod`会报`cross-env找不到的错`,因此不用了。 ### ab压测 `ab -c50 -n400 http://127.0.0.1:3003/` 模拟50个客户端,进行400次请求 ### 图片压缩 > cmd: node minimage.js > api: http://127.0.0.1:8888/tools/minimage?input=/Users/lucia/wc_web/selfcode/node_templete/resource/images/IMG_3095.JPG&output=/Users/lucia/wc_web/selfcode/node_templete/zipped/images ### 网页截图 > cmd: node screenshotPuppeteer.js > run method [shotWebpage] ### 中间件技术支持 - koa2cors 请求域名拦截 - koaratelimit 请求频次限制 - koa-static 访问静态资源处理 - uploader 文件上传 ### pm2 - 常用命令 ``` pm2 start [appname] 启动进程 pm2 status 查看进程信息 pm2 restart [appname] 重启进程 (程序报错后会自动执行,通过观察pm2 status显示的重启次数) pm2 stop [appname] 停止进程 pm2 delete [appname] 删除进程 pm2 info [appname] 获取进程运行信息 pm2 log [appname] 获取进程输出信息 ``` - 通过pm2.config.json文件配置pm2 ``` //pm2.config.json { "apps": { "name": "screenshot", //任务名称 "script": "index.js", //任务入口 "watch": false, //是否开启文件变动自动重启 "ignore_watch": [ "node_modules", "logs" ], //忽略监听变动的文件 "instances": 2, //启动的进程数量(多进程,根据服务器核心数来定) "error_file": "logs/err.log", //错误日志存放目录(通过 console.error(msg)的方式) "out_file": "logs/out.log", //输出日志存放目录(通过 console.log(msg)的方式) "log_date_format": "YYYY-MM-DD HH:mm:ss", //日志的时间格式 } } ``` ### onerror中间件解决404和单页应用history模式页面刷新404问题 ``` //status=404时进行路由转发到首页 const html = require('../router/html') module.exports = async (ctx, next) => { try { const {response,request} = ctx if(response.status == 404){ ctx.set({ 'Content-Type': 'text/html; charset=UTF-8', }); // ctx.body = `您访问的路由 ${request.url} 不存在 请 🔙🏠` // ctx.status = 200 html.index(ctx) //直接返回主页面,并能定位当前url } await next(); } catch (err) { console.log('Promise error: ' + (err instanceof Error ? err.stack : err)); ctx.set({ 'Content-Type': 'text/html; charset=UTF-8', }); ctx.body = `DPlayer-node 发生了一些意外:
${err instanceof Error ? err.stack : err}`; ctx.status = 500; } }; ``` ### 程序运行监控 - 内存使用情况 ```js console.log("内存使用情况(M):", process.memoryUsage().rss / 1024 / 1024); ``` - 监听未捕获的异常,及时上报 ```js process.on("uncaughtException", function (err) { console.error("uncaughtException:", err); eventReport("error", { title: "[fitness_node] 异常上报", content: err?.stack || err?.message || err, }); }); ```