Node.js nodejs中的无服务器Excel导出
我需要一个关于如何生成Excel的简单帮助,然后在serverless offline中单击API url将其导出。它应该显示该文件的下载选项。 当我用express frework在普通节点创建文件时,它正在生成正确的Excel文件,我可以轻松下载该文件。 但是,当我在无服务器脱机模式下使用相同的代码时,下载时会得到一个损坏的.xlsx文件。 我是无服务器离线新手,只知道离线创建和使用lambda函数的基础知识。 请帮我完成这项任务Node.js nodejs中的无服务器Excel导出,node.js,excel,amazon-web-services,serverless,serverless-offline,Node.js,Excel,Amazon Web Services,Serverless,Serverless Offline,我需要一个关于如何生成Excel的简单帮助,然后在serverless offline中单击API url将其导出。它应该显示该文件的下载选项。 当我用express frework在普通节点创建文件时,它正在生成正确的Excel文件,我可以轻松下载该文件。 但是,当我在无服务器脱机模式下使用相同的代码时,下载时会得到一个损坏的.xlsx文件。 我是无服务器离线新手,只知道离线创建和使用lambda函数的基础知识。 请帮我完成这项任务 **app.js:** var Excel = requir
**app.js:**
var Excel = require('exceljs');
var app = express();
var nodeExcel = require('excel-export');
const serverless = require('serverless-http')
app.get("/click", async (req, res) => {
var workbook = new Excel.Workbook();
var worksheet = workbook.addWorksheet('My Sheet');
worksheet.columns = [
{ header: 'Id', key: 'id', width: 10 },
{ header: 'Name', key: 'name', width: 32 },
{ header: 'D.O.B.', key: 'DOB', width: 10 }
];
worksheet.addRow({ id: 1, name: 'John Doe', dob: new Date(1970, 1, 1) });
worksheet.addRow({ id: 2, name: 'Jane Doe', dob: new Date(1965, 1, 7) });
await workbook.xlsx.writeFile('./temp.xlsx')
var fileName = 'temp.xlsx';
res.setHeader('Content-Type', 'application/octet-stream');
res.setHeader("Content-Disposition", "attachment; filename=" + fileName);
await workbook.xlsx.write(res);
})
module.exports.handler = serverless(app);
**Serverless.yml:**
plugins:
- serverless-offline
provider:
name: aws
runtime: nodejs10.x
custom:
serverless-offline:
host: '0.0.0.0'
functions:
app:
handler: route/app.handler
events:
- http:
path: /click
method: get
最后还有一个解决方案,它可以是暂时的,但很容易解决问题。 我可以在本地系统上下载一个文件。 因此,在服务器端,您可以很容易地使用静态文件方法,在点击链接时可以根据文件扩展名轻松下载或打开文件。 在客户端,您可以轻松调用该方法。 如果这些是应用程序/八位字节流文件,而不是浏览器本身的文件下载, 如果它是图像/pdf文件,那么它将很容易在浏览器中打开 由于我正在使用serverless offline,它提供了一个名为“serverless aws静态文件处理程序”的简单包。请看: 此函数将从路径获取文件,并从处理lambda异步事件调用的处理程序上提供的路径返回文件 这是我的一段代码。如果发现错误,请更正。 对于图像等二进制文件,您需要添加插件链接和自定义apigateway BinaryMediaType。对于其他文件,它也可以在没有它们的情况下工作
#index.js# file
const express = require('express')
const app = express()
const sls = require('serverless-http')
const path=require('path')
const StaticFileHandler = require('serverless-aws-static-file-handler')
var excel = require('exceljs');
const clientFilesPath = path.join(__dirname, "public")
const fileHandler = new StaticFileHandler(clientFilesPath)
module.exports.excel = async (event, context) => {
const workbook = new excel.Workbook();
var worksheet = workbook.addWorksheet('My Sheet');
worksheet.columns = [
{ header: 'Id', key: 'id', width: 10 },
{ header: 'Name', key: 'name', width: 32 },
{ header: 'D.O.B.', key: 'DOB', width: 10 }
];
worksheet.addRow({id: 1, name: 'John Doe', dob: new Date(1970,1,1)});
worksheet.addRow({id: 2, name: 'Jane Doe', dob: new Date(1965,1,7)});
await workbook.xlsx.writeFile('public/streamed-workbook.xlsx');
event.path = "streamed-workbook.xlsx"
return fileHandler.get(event, context)
}
module.exports.server = sls(app)
#Serverless.yml:#
provider:
name: aws
runtime: nodejs12.x
plugins:
- serverless-offline
- serverless-aws-static-file-handler/plugins/BinaryMediaTypes
custom:
apiGateway:
binaryMediaTypes:
- "image/png"
- "image/jpeg"
functions:
app:
handler: index.server
events:
- http: ANY /
- http: 'ANY {proxy+}'
excel:
handler: index.excel
events:
- http:
path: /exportexcel
method: get
请提供您尝试过的一些代码、处理函数和处理函数。我正在为此目的使用node excel导出模块。我正在按照此模块中的说明创建demo.xlsx文件,最终结果是.xlsx文件损坏。目前我无法发送代码。