Docker image pandoc/core from a Node.js Express application
const express = require('express');
const { exec } = require('child_process');
const fs = require('fs');
const os = require('os');
const path = require('path');
// 创建 express 应用
const app = express();
const port = 3000;
// 将 markdown 转换为 HTML 的 API 接口
app.post('/convert', (req, res) => {
if (!req.body || !req.body.markdown) {
return res.status(400).send('Markdown content is required.');
}
// 创建临时文件
const tempFile = path.join(os.tmpdir(), 'input.md');
fs.writeFileSync(tempFile, req.body.markdown);
// 执行 pandoc 命令转换文件
exec(`docker run --rm -v ${tempFile}:/data/input.md pandoc/core -o /data/output.html --self-contained /data/input.md`, (error, stdout, stderr) => {
if (error) {
console.error(`执行 pandoc 转换出错: ${error}`);
return res.status(500).send('Conversion failed.');
}
// 读取转换后的 HTML 文件
const html = fs.readFileSync(path.join(os.tmpdir(), 'output.html'), 'utf8');
res.send(html);
});
});
app.listen(port, () => {
console.log(`服务器运行在 http://localhost:${port}`);
});
这段代码示例展示了如何在一个 Node.js Express 应用中接收 markdown 内容,并使用 Docker 中的 pandoc/core 镜像将其转换为 HTML。它使用了 child_process.exec
来执行 Docker 命令,并且处理了文件的创建、转换和清理。这个例子简洁地展示了如何将 Docker 容器服务整合到 Node.js 应用程序中。
评论已关闭