подключение сервера mongodb через отдельный класс - PullRequest
0 голосов
/ 22 мая 2019

Я использую колбу для создания простого API.API просто возвращает значения из mongoDB.Все работает отлично, если я делаю соединение в той же функции.Я не делаю соединение просто в начале файла, потому что я использую uwsgi и сервер nginx на Ubuntu.Если я сделаю это, тогда возникнет проблема с fork.

Однако я должен использовать это соединение с другими API, поэтому подумал сделать отдельный класс для соединения, и каждый API просто вызовет его.Я использую эту функциональность, чтобы сделать коды управляемыми.Однако, когда я пытаюсь эти коды, он всегда показывает внутреннюю ошибку сервера .Я также пытался сделать эту функцию статичной, но ошибка все еще существует.

Примечание. Я заменил адрес mongodb на xxx , так как здесь я использую учетную запись mongodbatlas

from flask import Flask
from flask import request, jsonify
from flask_pymongo import pymongo
from pymongo import MongoClient
from flask_restful import Resource, Api, reqparse

app = Flask(__name__)
api = Api(app)
#client = MongoClient("xxx") 
#db = client.get_database('restdb')
#records = db.stars


class dbConnect():
    def connect(self):
        client = MongoClient("xxx") 
        db = client.get_database('restdb')
        records = db.stars
        return records


class Order(Resource):

    def get(self):
        #client = MongoClient("xxx") 
        #db = client.get_database('restdb')
        #records = db.stars
        #star = records
        star = dbConnect.connect
        output = []
        for s in star.find():
            output.append({'name' : s['name'], 'distance' : s['distance']})
        return jsonify({'result' : output})


api.add_resource(Order, '/')


if __name__ == "__main__":
    app.run(host='0.0.0.0')

ОШИБКА {"message": "Internal Server Error"}

1 Ответ

1 голос
/ 22 мая 2019

Предварительное расследование показывает, что вы не создали экземпляр класса dbConnect. Кроме того, вы неправильно вызвали метод connect.

class Order(Resource):

    def get(self):
        db = dbConnect() # This was missing
        star = db.connect() # This is how you make method call properly.
        output = []
        for s in star.find():
            output.append({'name' : s['name'], 'distance' : s['distance']})
        return jsonify({'result' : output})

Также class dbConnect() должен быть объявлен как class dbConnect:.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...