Я использую флягу для создания простого API. API просто возвращает значения из mongoDB. Все отлично работает, если я делаю соединение внутри одной и той же функции. Я не подключаюсь просто при запуске файла, потому что использую сервер uwsgi и nginx на Ubuntu. Если я это сделаю, то возникнет проблема форка.
Однако я должен использовать это соединение с другим 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"}
@Tony Я отредактировал исходный пост с ОШИБКОЙ внизу.
Предварительное расследование предполагает, что вы не создали экземпляр своего класса 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:
.
Спасибо за обнаружение синтаксических ошибок
Можете ли вы опубликовать, какую ошибку вы получаете на сервере при запуске вашего API?