mongoose - 使用 Azure Function 从 Mongo Atlas 获取数据
问题描述
我在 Mongo Atlas 上创建了一个集合,并且能够使用 Postman 添加和获取数据。我试图将此代码移动到 Azure 函数,但代码似乎不起作用。我的邮递员状态为 200,但没有数据。
注意 - 我很难弄清楚应用程序内的功能之间如何共享连接和模型。我参考了这个博客来取得进展。
// ./connection/index.js
const mongoose = require('mongoose')
// mongoose connection
const MONGOOSE_URI = mongodb+srv://[db_name]:[my_password]@cluster0.hberq.mongodb.net/email
mongoose.connect(MONGOOSE_URI, {
useNewUrlParser: true,
useCreateIndex: true,
useUnifiedTopology: true
})
const connection = mongoose.connection
connection.once('open', () => {
console.log('Established connection to DB')
})
// ./models/email.model.js
const mongoose = require('mongoose')
const Schema = mongoose.Schema
const emailSchema = new Schema({
name: String,
email: String,
message: String,
date: {
type: Date,
default: Date.now
},
isRead: {
type: Boolean,
default: false
},
isArchived: {
type: Boolean,
default: false
}
}, {
timestamps: true
})
const EmailModel = mongoose.model('EmailModel', emailSchema)
module.exports = EmailModel
// ./getEmails (the main function I'm trying to host)
const mongoose = require('mongoose')
const Schema = mongoose.Schema
const EmailModel = require('../models/email.model.js')
module.exports = async function(context, req) {
context.log('print me') // test - this prints on console
const test = await EmailModel.find()
context.log(test) // test - no output here
const test2 = await test.json()
context.log(test2) // test - no output here
EmailModel
.find()
.then(users => {
context.log('Success!'); // no output here on console
context.log(users)
context.log(users.json())
context.res = {
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ users })
};
context.done();
})
}
我究竟做错了什么?
解决方案
解决它!
TLDR;我没有context
正确使用返回值。而不是context.json()
, context.res()
, context.done(null, 'your response') 和我尝试过的所有其他恶作剧,它应该只是:
context.res = {
body: 'your response' // I can see 'your response' in Postman now.
}
./models/email.model.js
我在上面共享的文件保持不变。如果其他人需要,我将添加 和 的更新/更正版本以connection/index.js
供参考。./getEmails
// ./connection/index.js
const mongoose = require('mongoose')
const MONGOOSE_URI = "mongodb+srv://[db_name]:[my_password]@456@cluster0.hberq.mongodb.net/email"
mongoose.connect(MONGOOSE_URI, {
useNewUrlParser: true,
useCreateIndex: true,
useUnifiedTopology: true
})
const connection = mongoose.connection
connection.once('open', () => {
console.log('Established connection to DB')
})
return connection
// ./getEmails
const mongoose = require('mongoose')
const EmailModel = require('../models/email.model.js')
require('../connection/index.js')
module.exports = async function(context, req) {
const emails = await EmailModel.find()
context.res = {
body: emails
}
context.done()
}
推荐阅读
- excel - 迎接挑战?我无法调试此脚本
- tailwind-css - 如何将自定义填充权添加到顺风?
- html - 如何叠加两张图像但将其定位为看起来像一张?
- c# - 什么是自定义修饰符?
- reactjs - 如何在 Reacjs 的输入中重置 defaultValue
- amazon-web-services - 如何设置 API Gateway 和集成私有 API 端点之间的连接
- json - 使用 ADF 数据流对大型 json 文件进行分区
- sql - 使用 string_to_array() 将字符串放在引号内
- python - Ursina 场景变化
- sql - 我需要构建一个可执行文件,我从哪里开始