我对续集部分感到困惑。负责连接网关的人员指向旧端点,结果返回错误的答案。我也是我的错,因为我只使用网关而不是直接进行测试,我也没有正确监控日志。
仍然不知道如何解决 sqlite 部分,如果有人能够照亮它,我将不胜感激。即使光是“这是不可能的,因为......”
当我试图捆绑一个 Express 应用程序时,我遇到了困难,这样我就不必仅在 node_modules 上花费约 200MB 的存储空间。因此我以其他方式来到这里寻求帮助。问题来自于 Sequelize 和 sqlite3 模块,因为它们似乎没有按预期工作。
这个解释起来稍微简单一些。基本上,捆绑的 .js 文件本身没有 sqlite3 模块。
我尝试明确要求该模块,甚至传递给sequelize 实例的属性
dialectModule:
。如果我对包本身这样做,它将遇到各种依赖关系问题,一旦解决,输出如下:
Error: express-api-starter-ts package.json is not node-pre-gyp ready:
package.json must declare these properties:
binary
at Object.gRe [as validate_config] (path\dist\index.js:137:219)
at HM.find (path\dist\index.js:404:8282)
at path\dist\index.js:406:166
at path\dist\index.js:1:356
at path\dist\index.js:411:108
at path\dist\index.js:1:356
at Object.<anonymous> (path\dist\index.js:413:12918)
at Module._compile (node:internal/modules/cjs/loader:1241:14)
at Module._extensions..js (node:internal/modules/cjs/loader:1295:10)
at Module.load (node:internal/modules/cjs/loader:1091:32)
我还尝试将node_sqlite3模块编译成
.node
文件,并使用默认的esbuild .node加载器传递到相同的属性(但不知道我是否配置错误)并收到this.lib.Database is not a constructor
错误。
所以我排序放弃了,只是将模块安装在服务器上的一个node_module包中并让它正常运行。它起作用了,但它并不如我所愿。
当我解决了上一个问题并运行应用程序后,我注意到 REST 请求返回了一个答案,而没有考虑后续定义的模型。换句话说,如果代码中sequelize定义的结构是:
"name": "John",
"phone": "99999999",
"birthdate": 23102020
返回的答案为(数据库中存在的相同列名称):
"NAME": "John",
"PHONE": "99999999",
"BIRTHDATE": 23102020
我想知道是否有人曾经经历过这种情况或类似的情况,并有如何解决它的答案。
我用来捆绑的命令是:
esbuild src/index.ts --platform=node --loader:.node=file --bundle --minify --outfile=dist/index.js
您可能需要考虑将无法找到的库标记为外部库。检查外部 esbuild 的文档。
以下是此类构建脚本的示例:
const { build } = require('esbuild')
const glob = require('glob')
const entryPoints = glob.sync('./src/**/*.{ts,js}')
build({
entryPoints,
outbase: './src',
outdir: './dist' ,
platform: 'node',
minify: true,
bundle: true,
external: ["pg-hstore", "aws-sdk", "lambda-core", "lambda-dal"] // Here you would put your library name that you want to ignore
})