nodeJS模块mongoose给我错误

当我运行我的代码我得到一个错误我想要做的是当有人login到我的网站它将IP和其他数据logging到数据库中。 它似乎工作,但后来我得到这个错误,它退出了我的应用程序

{ [Error: Trying to open unclosed connection.] state: 1 } Connection to database has been established /home/azura/node_modules/mongoose/lib/index.js:343 throw new mongoose.Error.OverwriteModelError(name); ^ OverwriteModelError: Cannot overwrite `dataType` model once compiled. at Mongoose.model (/home/azura/node_modules/mongoose/lib/index.js:343:13) at Namespace.<anonymous> (/home/azura/Desktop/dbWrite.js:19:37) at Namespace.EventEmitter.emit (events.js:95:17) at Namespace.emit (/home/azura/node_modules/socket.io/lib/namespace.js:205:10) at /home/azura/node_modules/socket.io/lib/namespace.js:172:14 at process._tickCallback (node.js:415:13) 

我使用的代码是:

 var mongoose = require("mongoose"); var express = require("express"); var app = express(); var http = require("http").Server(app); var io = require("socket.io")(http); app.get("/", function (req, res) { res.sendFile(__dirname + "/index.html"); }); io.on("connection", function (socket) { var ip = socket.request.socket.remoteAddress; var dataBase = mongoose.connection; mongoose.connect("mongodb://localhost:27017/NEW_DB1"); dataBase.on("error", console.error); console.log("Connection to database has been established"); var collectedData = new mongoose.Schema({ ipAddress: String, time: Number }); var collectionOfData = mongoose.model("dataType", collectedData); var Maindata = new collectionOfData({ ipAddress: ip, time: 100000000000000000 }); Maindata.save(function (err, Maindata) { if (err) { return console.error(err); } else { console.dir(Maindata); } }); }); http.listen(10203, function () { console.log("Server is up"); }); 

index.html文件没有什么重要的。 我只是想知道为什么我得到这个错误。 我能做些什么来解决它?

把这个代码放在连接范围之外。 没有必要创build架构每一种types都有新的连接事件。

 mongoose.connect("mongodb://localhost:27017/NEW_DB1"); dataBase.on("error", console.error); console.log("Connection to database has been established"); var collectedData = new mongoose.Schema({ ipAddress: String, time: Number }); var collectionOfData = mongoose.model("dataType", collectedData); io.on("connection", function (socket) { var ip = socket.request.socket.remoteAddress; var dataBase = mongoose.connection; var Maindata = new collectionOfData({ ipAddress: ip, time: 100000000000000000 }); Maindata.save(function (err, Maindata) { if (err) { return console.error(err); } else { console.dir(Maindata); } }); }); 

每次连接进来,“连接”事件将被发射,所以mongoose.connect("mongodb://localhost:27017/NEW_DB1"); 将执行曼尼时间,这会导致错误。