首页 > 解决方案 > 使用 Azure Function 从 Mongo Atlas 获取数据

问题描述

我在 Mongo Atlas 上创建了一个集合,并且能够使用 Postman 添加和获取数据。我试图将此代码移动到 Azure 函数,但代码似乎不起作用。我的邮递员状态为 200,但没有数据。

注意 - 我很难弄清楚应用程序内的功能之间如何共享连接和模型。我参考了这个博客来取得进展

  1. 这就是我在 Azure 服务器中“[your-function-name].scm.azurewebsites.net”的当前文件夹的样子。 在此处输入图像描述

  2. 这是我的文件详细信息

// ./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(); 
        })
}
  1. 这是我得到的输出 注意 - 在我被击中并尝试对代码进行一些尝试后,一些错误开始出现(如屏幕截图所示)。 在此处输入图像描述

我究竟做错了什么?

标签: mongooseazure-functionsmongoose-schema

解决方案


解决它!

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()
}

推荐阅读