Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js nodejs中的无服务器Excel导出_Node.js_Excel_Amazon Web Services_Serverless_Serverless Offline - Fatal编程技术网

Node.js nodejs中的无服务器Excel导出

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

我需要一个关于如何生成Excel的简单帮助,然后在serverless offline中单击API url将其导出。它应该显示该文件的下载选项。 当我用express frework在普通节点创建文件时,它正在生成正确的Excel文件,我可以轻松下载该文件。 但是,当我在无服务器脱机模式下使用相同的代码时,下载时会得到一个损坏的.xlsx文件。 我是无服务器离线新手,只知道离线创建和使用lambda函数的基础知识。 请帮我完成这项任务

**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文件损坏。目前我无法发送代码。