从react客户端调用mongoose

IT技术 mongodb reactjs mongoose mongodb-query
2021-05-03 18:09:36

是的,我知道我应该从服务器端调用它。但目的是从 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

如何解决这个问题呢?

3个回答

这里的评论

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没有被导入。

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-middlewareso express 来提供 webpack 文件。

你需要MongoDB领域

伪代码示例:

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