我正在尝试连接到我的node.js AWS Lambda函数上的sqlite3数据库。当我在本地测试时,代码运行完美,但当我将其上传到AWS Lambda时,我收到以下错误消息:
Error: Cannot find module '/var/task/node_modules/sqlite3/lib/binding/node-v48-linux-x64/node_sqlite3.node'
at Function.Module._resolveFilename (module.js:469:15)
at Function.Module._load (module.js:417:25)
at Module.require (module.js:497:17)
at require (internal/module.js:20:19)
at Object.<anonymous> (/var/task/node_modules/sqlite3/lib/sqlite3.js:4:15)
at Module._compile (module.js:570:32)
at Object.Module._extensions..js (module.js:579:10)
at Module.load (module.js:487:32)
at tryModuleLoad (module.js:446:12)
at Function.Module._load (module.js:438:3) code: 'MODULE_NOT_FOUND' }
似乎AWS Lambda函数试图访问我的npm安装中不存在的node-v48-linux-x64文件夹,因为我使用Windows进行开发。
任何人都知道如何解决此问题或如何获取node-v48-linux-x64文件夹的内容?
答案 0 :(得分:1)
问题是您在Windows计算机上执行了npm install
,然后将此node_modules
目录与Lambda函数一起上传。
在Windows计算机上运行npm install
基本上构建了带有Windows绑定的sqlite
包,而不是AWS Lambda使用的Linux。 Windows的绑定在Linux上不起作用。
解决方案是在Linux机器上执行npm install
,然后将此node_modules
目录(在Linux上创建)与Lambda函数一起上传。
要做到这一点,你可以,
vagrant
等)并在那里npm install
进行操作。docker
。sqlite
包
答案 1 :(得分:0)
您可以通过安装sqlite3的跨平台版本来解决此问题。 首先在您的项目中安装sqlite3:
npm install sqlite3
然后在全局范围内安装node-pre-gyp:
npm install -g node-pre-gyp
然后使用node-pre-gyp为Linux安装sqlite3
node-pre-gyp install --directory=./node_modules/sqlite3 --target_platform=linux --target_arch=x64