使用lambda部署时,fs.readFileSync无法找到文件

时间:2018-02-05 06:55:39

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

在我的代码中,我从lambda函数中调用一个查询

let featured_json_data = JSON.parse(fs.readFileSync('data/jsons/featured.json'))

这在本地工作,因为我的featured.json位于我正在阅读的目录中。但是,当我使用无服务器进行部署时,它生成的zip没有这些文件,我得到了

ENOENT: no such file directory, open...

我尝试添加

包装
package: 
include: 
 - data/jsons/featured.json

但它不起作用。我得到它的唯一方法是手动添加json文件,然后更改我的编译handler.js代码以从根目录中的json文件中读取。

在这个截图中我必须添加jsons然后再次手动上传它并在编译的handler.js代码中更改目录以排除data / jsons

enter image description here

我想在我的servereless.yml

中实际处理这个问题

4 个答案:

答案 0 :(得分:1)

您可以使用require()加载JSON文件。

const featured_json_data = require('./featured.json')

或者更好的是,将您的JSON转换为JS!

答案 1 :(得分:0)

  使用lambda

部署时,

fs.readFileSync无法找到文件

检查当前目录并检查部署环境中的目标目录内容。将该检查的适当代码添加到您的程序/脚本中。

答案 2 :(得分:0)

我建议您查看copy-webpack-pluginhttps://github.com/webpack-contrib/copy-webpack-plugin

您可以使用它打包其他文件以包含在Lambda部署中。

在我的项目中,我在/ templates目录中有一堆文件。在webpack.config.js中打包这些模板,对我来说,它看起来像:

const CopyWebpackPlugin = require('copy-webpack-plugin');

module.exports = {
  plugins: [
    new CopyWebpackPlugin([
      './templates/*'
    ])
  ]
};

答案 3 :(得分:0)

对于使用非JSON文件,我发现process.cwd()在大多数情况下对我有用。例如:

const fs = require('fs');
const path = require('path');

export default async (event, context, callback) => {
  try {
    console.log('cwd path', process.cwd());

    const html = fs.readFileSync(
      path.resolve(process.cwd(), './html/index.html'),
      'utf-8'
    );

    const response = {
      statusCode: 200,
      headers: {
        'Content-Type': 'text/html'
      },
      body: html
    };

    callback(null, response);
  } catch (err) {
    console.log(err);
  }
};