Serverless.yml AWS Lambda 将 EJS 模板嵌入到 Handler.js
Serverless.yml AWS Lambda Embedding EJS Template into Handler.js
我正在尝试将名为 '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)),
};
};
您可以使用copy-webpack-plugin将视图文件夹复制到目标目录。
在你的 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/**
修复:
我使用 'path' 模块找到了一个快速解决方案。
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)),
};
};
我正在尝试将名为 '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)),
};
};
您可以使用copy-webpack-plugin将视图文件夹复制到目标目录。
在你的 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/**
修复: 我使用 'path' 模块找到了一个快速解决方案。
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)),
};
};