我正在尝试使用node.js,React,ReactRouter和webpack在c9.io中建立基本的mongoose连接。我已经建立了mongodb并且正在监听,但是当我尝试要求mongoose并开始连接时,它失败并且告诉我“undefined不是函数”,指向我“mongoose.connect”。这是我的代码。我不确定我做错了什么。
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost:27017');//this returns "undefined is not a function" and fails
var Schema = mongoose.Schema;
var postSchema = new Schema({
title: String,
description: String,
author: String,
content: String
});
var Post = mongoose.model('Post', postSchema);
module.exports = Post;
有什么想法?我想知道webpack是否存在问题,因为我使用的是React-router而不是服务器端。
答案 0 :(得分:11)
如果您在客户端代码中需要此文件(例如,在React组件中),那么是的,这就是问题。
您只能在服务器端(例如,您的“server.js”文件)中要求这样做。
答案 1 :(得分:0)
该错误意味着您正在调用不存在的方法。 我会再次安装mongoose模块:
npm install mongoose --save
答案 2 :(得分:0)
React是客户端,因此为猫鼬创建一个快递服务器,我花了几个小时就遇到了同样的问题,并且找到了一个好的解决方案。
我正在尝试使用node.js,React,ReactRouter和webpack在c9.io中建立基本的猫鼬连接。 好吧,
MERN非常棒。 我唯一的问题是我不能在React端使用Mongoose,遇到了这个问题,几个小时后,我找到了一个更好的解决方案,
无需在package.json上放置任何内容,无需担心CORS,
这是一个使用mongoose进行用户注册的工作示例(mongoose永远不会在客户端运行,不浪费时间,修改库很耗时),
在某个端口(例如3030)上启动您的Express服务器,React在3000上运行,
在React端,
constructor(){
...
this.server = server || 'https://my.ip.add.ress:3030'
...
}
register(username, password, signup = true) {
return this.fetch(`${this.server}/server/register`, {
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: JSON.stringify({
username,
password,
signup
})
}).then(res => { console.log(res);
this.setToken(res.token) // Setting the token in localStorage
return Promise.resolve(res);
})
}
在Node.JS服务器(快速)端,
创建一个文件夹“服务器”并创建一个文件server.js,
var MongoNode = require('mongoosenode') // I created this package for just to test mongoose which doesn't run on React side,
var cors = require('cors'); //use cors for cross-site request
var options = {
key : fs.readFileSync('server.key'),
cert : fs.readFileSync('server.cert'),
};
/*
* Cors Options
*/
var whitelist = config.allowedOrigins //put https://my.ip.add.ress:3000 in the allowedOrigins array in your config file
var corsOptions = {
origin: function (origin, callback) {
if (whitelist.indexOf(origin) !== -1) {
callback(null, true)
} else {
callback(new Error('Not allowed by CORS'))
}
}
}
//specify the port
var https_port = config.server.port || 3030;
//use app or any route included to server.js
app.post('/register', cors(corsOptions),function(req, res) {
//Process requests
console.log(req.body); //see if request payload popping up
var mn = new MongoNode('mongodb://username:password@127.0.0.1:27017/databasename')
var user = mn.retrieveModel('User','User').then(async(res) => {
try {
user = res.model;
console.log(user);
user.username = req.body.username
user.password = req.body.password
user.token = token_str //jwt web token to save browser cookie
user.save(function(err) {
if (err) throw err;
console.log('user saved successfully');
res.json({ success: true, token: user.token});
});
}catch(e) {
console.log(e);
}
})
user.save(function(err) {
if (err) throw err;
//console.log('user saved successfully');
res.json({ success: true , message: 'user saved successfully', token : user.token });
});
}
Voila!经过几个小时的阅读,即可轻松完成。