置顶

(总结使用)在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;
稳定之后宝塔进程保护一下
图片.png



正在运行的脚本

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');
});


发表评论

取消
微信二维码
支付宝二维码