【问题标题】:Calling mongoose from react client side从反应客户端调用猫鼬
【发布时间】:2018-12-10 00:08:05
【问题描述】:

是的,我知道我应该从服务器端调用它。但目的是从 react-redux 应用程序调用 MongoDB 海峡。这就像 firebase 无服务器应用程序一样。 我写

    import mongoose from 'mongoose';

    let mongoDB = 'mongodb://127.0.0.1/my_database';
    mongoose.connect(mongoDB);

    mongoose.Promise = global.Promise;

    let db = mongoose.connection;
    db.on('error', console.error.bind(console, 'MongoDB connection error:'));

我得到:

TypeError: __ 
WEBPACK_IMPORTED_MODULE_6_mongoose___default.a.connect is not a function

如何解决这个问题?

【问题讨论】:

  • 你把这段代码放在你的 react 应用中的什么地方?
  • 在 redux 传奇之一中。
  • 您显示的错误通常是由于将某些内容放入渲染中或返回不是有效反应子的无状态功能组件。您在此处显示的代码可能不是您的错误的原因。

标签: mongodb reactjs mongoose mongodb-query


【解决方案1】:

来自评论here

Mongoose 不能在前端工作,因为它依赖于 Node 的功能,而这在浏览器 JS 实现中是不存在的。您不能将 Mongoose 导入前端代码。


尝试在你的 react 应用中导入 mongoose

import mongoose from "mongoose";

并遍历其属性:

Object.getOwnPropertyNames(mongoose).forEach(prop => {
  console.log(prop);
});

你会得到

Promise
PromiseProvider
Error
Schema
Types
VirtualType
SchemaType
utils
Document

未导入您需要使用 MongoDB 的方法,例如 connect

【讨论】:

    【解决方案2】:

    mongoDB 必须从服务器初始化。它不像firebase,您可以直接从服务器连接。如果你想从客户端做一个操作,你必须在服务器上定义一个端点,从客户端向这个端点发出请求,并在这个端点上处理这个请求。既然你不清楚你到底想做什么,我给你举个简单的例子。

    假设在一个组件中,您正在从 mongodb 获取歌曲并将它们渲染到屏幕上,并且您想添加一个清除按钮来清除列表。

      <a href="/delete">
        <button>Clear the Screen</button>
      </a>
    

    假设我有一个在 mongoose 中定义的 Song 模型。

    app.use("/delete", async (req, res) => {
      await Song.deleteMany();
      res.redirect("/");
    });
    

    我从客户端发送了一个请求,服务器处理了这个 CRUD 操作。

    请注意,由于您是从客户端向服务器发出请求,因此您必须设置代理。或者你可以使用webpack-dev-middleware 这样 express 将提供 webpack 文件。

    【讨论】:

      【解决方案3】:

      你需要MongoDB Realm

      伪代码示例:

      import * as Realm from "realm-web";
      
      const REALM_APP_ID = "<Your App ID>"; // e.g. myapp-abcde
      const app = new Realm.App({ id: REALM_APP_ID });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-04-22
        • 2013-10-08
        • 2021-09-18
        • 2021-04-03
        • 1970-01-01
        • 2019-06-01
        • 2021-07-20
        • 2020-09-13
        相关资源
        最近更新 更多