如何将Flutter与MongoDB连接

10

我有一个用Nuxt JS和MongoDB构建的网站。

我想使用Flutter创建一个移动应用程序,但不知道如何连接Flutter和MongoDB。

给我一些代码示例。

这里是解决方案!(点击这里)

实际上,我发布了一篇关于此的博客,请随意查看解决方案!

  1. 适用于MongoDB和MongoDB Atlas
  2. 初学者指南

有趣的是,有人简单地审查了您博客中发布的每一条评论,即使只是稍微暗示您将应用程序直接连接到数据库的“解决方案”不是一个好主意。我几分钟前发表了两条评论,但都被拒绝了。老实说,我不认为允许评论的博客有任何意义,同时又审查和删除所有建议另一种可能前进道路的尊重评论。我认为这并不鼓励健康的建设性批评或对话。那么祝你好运!和平。 - Reinier Garcia
@ReinierGarcia,许多博客由于垃圾评论而不允许自动发布评论。您的评论将会被发布 :) - Rohit Nishad
2个回答

22

导入flutter库mongo_dart并连接到数据库。 mongo_dart是MongoDB的服务端驱动库,纯Dart实现。

希望下面的代码片段能够帮助!

import 'package:mongo_dart/mongo_dart.dart' show Db, DbCollection;
class DBConnection {

  static DBConnection _instance;

  final String _host = "DATABASE SERVER";
  final String _port = "DATABASE PORT";
  final String _dbName = "DATABASE NAME";
  Db _db;

  static getInstance(){
    if(_instance == null) {
      _instance = DBConnection();
    }
    return _instance;
  }

  Future<Db> getConnection() async{
    if (_db == null){
      try {
        _db = Db(_getConnectionString());
        await _db.open();
      } catch(e){
        print(e);
      }
    }
    return _db;
  }

  _getConnectionString(){
    return "mongodb://$_host:$_port/$_dbName";
  }

  closeConnection() {
    _db.close();
  }

}

Atlas是什么情况? - Rohit Nishad
1
如果有人制作基于Web的Flutter应用程序,mongo_dart将不支持它,因为它使用了dart:io。在使用之前请检查。 - cointreau
1
将前端客户端或移动应用程序直接连接到数据库而不使用公开必要API端点的服务器是绝对不合理的。您的API是唯一应直接连接到数据库的。否则,每个解压缩您应用程序代码的用户都将完全访问所有API密钥、AWS S3秘密密钥以及包含所有登录数据等等的每个Env变量。将拥有对所有内容的绝对访问权限。这是自杀行为。 - Reinier Garcia

13

Sandeep Krishna的回答是正确的,但如果您已经有了Nodejs后端,则可以使用http、dio或其他类似包公开REST API,并使用这些工具与Flutter进行连接。将前端直接连接到数据库是不好的做法,这只是一些建议。


1
如果我使用Node.js作为后端REST API,那么它会影响性能吗? - Rohit Nishad
4
不会对性能产生负面影响。前端不涉及繁重的业务逻辑,只需在数据从后端请求到之前显示加载器。建议您先阅读这个Quora问题的第一个答案:为什么在Web开发中需要后端?前端不能直接向数据库发送请求吗? - Ratnadeep Bhattacharyya
我应该使用哪个前端框架或库以获得最佳性能?(忽略React) - Rohit Nishad
1
如果你知道如何使用它,每个框架或库都是好的。如果你知道如何使用它、了解其限制和工作原理,你可以获得良好的性能。并不是像“去使用这个更好一些”这样的直接答案,推荐一个好的框架需要进行长时间的讨论。如果你现在需要一个答案,那就随便选一个你喜欢的。 - Ratnadeep Bhattacharyya

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接