从客户端调用猫鼬

时间:2018-07-01 15:41:10

标签: mongodb reactjs mongoose mongodb-query

是的,我知道我应该从服务器端调用它。但是目的是从react-redux应用程序调用MongoDB strait。就像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

如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

来自评论here

  

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


尝试在您的React应用程序中导入猫鼬

import mongoose from "mongoose";

并遍历其属性:

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

你会得到

Promise
PromiseProvider
Error
Schema
Types
VirtualType
SchemaType
utils
Document

未导入需要与MongoDB配合使用的方法,例如connect

答案 1 :(得分:0)

mongoDB必须从服务器初始化。您可以直接从服务器连接,这与Firebase不同。如果要从客户端执行操作,则必须在服务器上定义一个端点,从客户端向该端点发出请求,并在此端点上处理此请求。由于您不清楚您到底要做什么,因此我将举一个简单的例子。

比方说,在一个组件中,您正在从mongodb中获取歌曲并将它们呈现到屏幕上,并且您想添加一个清除按钮来清除列表。

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

假设我有一个用猫鼬定义的Song模型。

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

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

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