是的,我知道我应该从服务器端调用它。但是目的是从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
如何解决这个问题?
答案 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文件。