(总结使用)在Linux中安装和配置Node.js与Express.js创建HTTP服务器+linux 服务器上使用Node+Puppeteer搭建SSR环境的详细步骤
作者:admin | 分类:cuini | 浏览:112 | 日期:2024年11月30日前言,1, 过程安装过thinkphp8发现无法调用node.js!部分功能失效保存图片截图。linux 运行又可以,预计是PHP用户组不对导致node get_page_content.js后面的网址是参数传参方式!以上是失败的案例无需理解!
开始安装
1,linux 服务器上使用Node+Puppeteer搭建SSR环境的详细步骤
其中,## 安装谷歌浏览器无需安装
主要安装
node
npm
puppeteer
安装依赖库
2,在Linux中安装和配置Node.js与Express.js创建HTTP服务器
照常安装
3,使用
linux 运行
node server.js
请求地址,开放3000端口,阿里云,宝塔。
http://locals:3000/user/36/4
app.get('/user/:id/:num', async function (req, res) {
//第一个参数是id,接着是第二个参数num,接受方式
const id = req.params.id;
const num = parseInt(req.params.num);
const arg1 = 'local' + id;
稳定之后宝塔进程保护一下

正在运行的脚本
const express = require('express');
const fs = require('fs');
const app = express();
let isProcessing = false; // 标志是否正在处理请求
app.get('/user/:id/:num', async function (req, res) {
if (isProcessing) { // 如果正在处理请求,则拒绝新的请求
res.status(503).send('服务暂时不可用,请稍后再试');
return;
}
isProcessing = true; // 标记开始处理请求
const id = req.params.id;
const num = parseInt(req.params.num);
let result;
if (num === 1) {
result = num + 650;
} else {
result = num * 180 + 300;
}
if (40 < num) { // 如果正在处理请求,则拒绝新的请求
res.status(503).send('方案超出最大产品数');
isProcessing = false; // 处理完成时,取消处理标志
return;
}
const arg1 = 'localhost' + id;
const puppeteer = require('puppeteer');
async function takeScreenshot() {
try {
console.log('1111');
console.log(arg1);
const browser = await puppeteer.launch({
args: [
'--no-sandbox',
'--disable-setuid-sandbox',
]
});
const page = await browser.newPage();
await page.goto(arg1);
await page.setViewport({ width: 1920, height: result });
await page.screenshot({ path: `/www/wwwroot/img/${id}.png` });
await browser.close();
} catch (puppeteerError) {
console.error('Puppeteer 操作出错:', puppeteerError);
res.status(500).send('内部服务器错误 - Puppeteer 操作失败');
isProcessing = false; // 处理出错时,取消处理标志
return;
}
try {
// 异步读取图片文件
fs.readFile(`/www/wwwroot/img/${id}.png`, (fsError, file) => {
if (fsError) {
console.error('文件读取出错:', fsError);
res.status(500).send('内部服务器错误 - 文件读取失败');
isProcessing = false; // 处理出错时,取消处理标志
return;
}
res.writeHead(200, {
'Content-Type': 'image/png',
'Content-Disposition': `attachment; filename="${id}.png"`
});
res.end(file);
isProcessing = false; // 处理完成时,取消处理标志
});
} catch (fsError) {
console.error('文件读取出错:', fsError);
res.status(500).send('内部服务器错误 - 文件读取失败');
isProcessing = false; // 处理出错时,取消处理标志
}
}
takeScreenshot();
});
app.listen(3000, function () {
console.log('Server is running on port 3000');
});