【发布时间】:2020-05-23 10:10:03
【问题描述】:
我正在使用 Node JS 创建一个 AWS Lambda API。数据库连接本身有一个模板,但是当我在 Lambda 中运行测试时出现错误,我认为问题出在连接本身。
这是我在使用 Lambda 测试时收到的错误消息:
START RequestId:6b9eef97-9c54-44bc-8ecc-dfbec7e200e5 版本:$LATEST 2020-05-23T01:46:23.685Z 6b9eef97-9c54-44bc-8ecc-dfbec7e200e5 INFO => 使用新的数据库连接 2020-05-23T01:46:23.689Z 6b9eef97-9c54-44bc-8ecc-dfbec7e200e5 错误(节点:8) 弃用警告:当前 URL 字符串解析器已弃用,并将在未来版本中删除。要使用新的解析器,请将选项 { useNewUrlParser: true } 传递给 MongoClient.connect。 2020-05-23T01:46:23.726Z 6b9eef97-9c54-44bc-8ecc-dfbec7e200e5 错误(节点:8) 弃用警告:当前的服务器发现和监控引擎已弃用,并将在未来版本中删除。要使用新的服务器发现和监控引擎,请将选项 { useUnifiedTopology: true } 传递给 MongoClient 构造函数。 2020-05-23T01:46:23.828Z 6b9eef97-9c54-44bc-8ecc-dfbec7e200e5 错误未处理的承诺拒绝 {“errorType”:“Runtime.UnhandledPromiseRejection”,“errorMessage”:“SyntaxError:JSON 中位置 0 的意外标记 u” ,"reason":{"errorType":"SyntaxError","errorMessage":"JSON 中位置 0 的意外标记 u","stack":["SyntaxError: JSON 中位置 0 的意外标记 u"," 在 JSON .parse ()"," 在 /var/task/handler.js:17:22"," 在 processTicksAndRejections (internal/process/task_queues.js:97:5)"]},"promise":{},"堆栈“:[“Runtime.UnhandledPromiseRejection:SyntaxError:JSON中位置0处的意外标记u”,“在进程。(/var/runtime/index.js:35:15)”,“在process.emit(events.js :310:20)"," 在 processPromiseRejections (internal/process/promises.js:209:33)"," 在 processTicksAndRejections (internal/process/task_queues.js:98:32)"]} 结束请求 ID:6b9eef97-9c54-44bc-8ecc-dfbec7e200e5 报告请求 ID:6b9eef97-9c54-44bc-8ecc-dfbec7e200e5 持续时间:186.61 毫秒计费持续时间:200 毫秒内存大小:1024 MB 使用的最大内存:34 MB
发生未知的应用程序错误
DB.js
const mongoose = require("mongoose");
mongoose.Promise = global.Promise;
let isConnected;
module.exports = connectToDatabase = () => {
if (isConnected) {
console.log("=> using existing database connection");
return Promise.resolve();
}
console.log("=> using new database connection");
return mongoose.connect(process.env.DB).then((db) => {
isConnected = db.connections[0].readyState;
});
};
Handler.js
"use strict";
const connectToDatabase = require("./db");
const Lead = require("./leads.model.js");
require("dotenv").config({ path: "./variables.env" });
module.exports.hello = (event, context, callback) => {
console.log("Hello World");
callback(null, "Hello World");
};
module.exports.create = (event, context, callback) => {
context.callbackWaitsForEmptyEventLoop = false;
connectToDatabase().then(() => {
Lead.create(JSON.parse(event.body))
.then((lead) =>
callback(null, {
statusCode: 200,
body: JSON.stringify(lead),
})
)
.catch((err) =>
callback(null, {
statusCode: err.statusCode || 500,
headers: { "Content-Type": "text/plain" },
body: "Could not create the lead.",
})
);
});
};
variables.env
DB=mongodb+srv://dbUser:password@api-jodqc.mongodb.net/test?retryWrites=true&w=majority
【问题讨论】:
-
这通常意味着你试图解析的是
undefined。由于我只在一处看到JSON.parse(),我猜event.body是undefined。
标签: node.js mongodb aws-lambda