【问题标题】:Serverless.yml AWS Lambda Embedding EJS Template into Handler.jsServerless.yml AWS Lambda 将 EJS 模板嵌入到 Handler.js
【发布时间】:2023-03-06 20:29:02
【问题描述】:

我正在尝试将名为“ui.ejs”的 EJS 模板嵌入到 handler.js 中。 目的是捕获 URL 查询参数,然后将它们传递给函数名称“ui.js”以捕获数据,然后将该数据传递给名为“ui.ejs”的 EJS UI 模板。 但我不断收到此错误:

Failure: ENOENT: no such file or directory, open 'D:\Studio\Work\YellowCard\dynamo_serverless_rest\.webpack\service/views/ui.ejs'

似乎 webpack 正在干扰我的目录路径。 该目录位于 '/views/ui.ejs' 而不是 '.webpack\service/views/ui.ejs' 下,如错误声明。 我如何解决它? 提前谢谢..!

这里是 handler.js 代码:


// Import modules and dependencies
import {ui} from './index.js';
var ejs = require('ejs');
var fs = require('fs');

// Implementing the UI
export async function UserInterface(event, context, callback) {

    // Capture data event parameters
    const e = event.queryStringParameters;

    // Get UI parameters
    let params = await ui(e);

    var htmlContent = fs.readFileSync(__dirname + '/views/' + 'ui.ejs', 'utf8');

    var template = ejs.compile(htmlContent);

    return {
      statusCode: 200,
      headers: { 'Content-type': 'text/html' },
      body: JSON.stringify(template(params)),
      };

};

【问题讨论】:

    标签: javascript node.js amazon-web-services aws-lambda serverless-framework


    【解决方案1】:

    您可以使用copy-webpack-plugin 将views 文件夹复制到目标目录。

    在你的 webpack 配置文件中 (webpack.config.js)

    const CopyPlugin = require("copy-webpack-plugin");
    // ...
    
      plugins: [
        new CopyPlugin({
          patterns: [
            { from: "views", to: path.join(__dirname, '.webpack', 'service', 'views') },
          ],
        }),
      ],
    

    同时更新 serverless.yml 文件以将视图目录包含到您的 lambda 函数中

    package:
      include:
        - views/**
    

    【讨论】:

      【解决方案2】:

      修复: 我找到了一个使用“路径”模块的快速解决方案。

      
      import {ui} from './index.js';
      var ejs = require('ejs');
      var fs = require('fs');
      const path = require('path');
      
      // Implementing the UI
      export async function UserInterface(event, context, callback) {
      
          // Capture data event
          const e = event.queryStringParameters;
      
          // Get UI parameters
          let params = await ui(e);
      
          var htmlContent = fs.readFileSync(path.resolve(process.cwd(), './views/' + 'ui.ejs'), 'utf8');
      
          var template = ejs.compile(htmlContent);
      
          return {
            statusCode: 200,
            headers: { 'Content-type': 'text/html' },
            body: JSON.stringify(template(params)),
            };
      
      };
      
      

      【讨论】:

        猜你喜欢
        • 2021-09-26
        • 1970-01-01
        • 2018-08-30
        • 2023-03-21
        • 1970-01-01
        • 2016-03-06
        • 2016-08-10
        • 2019-02-23
        • 1970-01-01
        相关资源
        最近更新 更多