Jen*_*nny 1 mongoose aws-lambda
我想将 lambda 函数与 Netlify 和 Mongoose 一起使用。基本上触发前端的函数并更新数据库。
const mongoose = require('mongoose')
let uri = 'mongodb+srv://...flashcard?retryWrites=true&w=majority'
let client = mongoose.connect(`${uri}`, {
useNewUrlParser: true
}
);
const clientPromise = client.connect()
exports.handler = async (event, context, callback) => {
context.callbackWaitsForEmptyEventLoop = false;
try {
client = await clientPromise;
client.db('flashcards').createCollection('hello')
return {
statusCode: 200,
};
} catch (err) {
return {
statusCode: 500,
body: JSON.stringify({ msg: err.message })
};
}
}
Run Code Online (Sandbox Code Playgroud)
这不起作用并返回
500 Internal Server Error Cannot read properties of undefined (reading 'connect')
Run Code Online (Sandbox Code Playgroud)
但是,如果我使用 MongoClient 执行此操作并仅更改第一部分,它就会工作并更新数据库。
const { MongoClient } = require('mongodb');
let uri = 'mongodb+srv://...flashcard?retryWrites=true&w=majority'
let client = new MongoClient(`${uri}`, {
useNewUrlParser: true
}
);
Run Code Online (Sandbox Code Playgroud)
我怎样才能用猫鼬做到这一点?谢谢阅读!
我从以下位置获取了工作示例
https://www.mongodb.com/docs/atlas/manage-connections-aws-lambda/
Run Code Online (Sandbox Code Playgroud)
我就是这样做的。我使用了 React.js 并在 Netlify 上部署了简单的网站来检查他们的无服务器功能如何工作。在这个例子中,我只是从表单发送电子邮件并将其数据保存在 mongo atlas 数据库中,我使用 mongoose。
创建文件夹 db > conntectDb.js 文件
在 connectDb.js 文件中
const mongoose = require('mongoose');
const connectDb = async (url) => {
//Here you can observe that url of mongo atlas will show once
//Check this in netlify functions panel after you deploy your page
//Observe it when you send form using url netlify function
console.log(url, 'url to mongo atlas, connectDb');
await mongoose.connect(url);
};
module.exports = connectDb;
Run Code Online (Sandbox Code Playgroud)
创建文件夹 models > email.js 文件
在 email.js 文件中创建电子邮件架构
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const emailSchema = new Schema({
name: {
type: String,
required: true,
},
email: {
type: String,
required: true,
},
message: {
type: String,
required: true,
},
});
module.exports = mongoose.model('Email', emailSchema);
Run Code Online (Sandbox Code Playgroud)
创建文件夹 netlify > 文件夹功能 > email.js 文件
这里保留netlify函数
有关向项目添加 netlify 函数时文件夹结构的信息,您可以在此处找到:https ://docs.netlify.com/functions/build-with-javascript/
在 email.js 文件中
const mongoose = require('mongoose');
const connectDb = require('../../db/connectDb');
const Email = require('../../models/email');
connectDb(process.env.REACT_APP_DB);
//Make connection with mongoose to mongo atlas outside handler
exports.handler = async function (event) {
//Observe state connection for mongoose in
//Netlify functions panel on their website when you deploy your page
console.log(mongoose.connection.readyState, 'Ready state email');
const body = JSON.parse(event.body);
const newEmail = await Email.create(body);
return{
statusCode: 200,
body: JSON.stringify({ value: newEmail }),
};
};
Run Code Online (Sandbox Code Playgroud)
注意:我在函数处理程序之外添加了连接 mongoose (connectDb)。
在您的组件中进行反应(在本例中我使用反应):
就这样。我希望这对你有帮助。
| 归档时间: |
|
| 查看次数: |
2580 次 |
| 最近记录: |