【问题标题】:nodeJS module mongoose is giving me errorsnodeJS模块猫鼬给了我错误
【发布时间】:2015-10-26 07:33:00
【问题描述】:

当我运行我的代码时,我得到一个错误 我想要做的是当有人登录到我的网站时,它会将 IP 和其他数据记录到数据库中。它似乎有效,但随后我收到此错误并退出我的应用程序

{ [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 文件中没有任何重要内容。 我只是想知道为什么我会收到这个错误。 我该怎么做才能解决它?

【问题讨论】:

    标签: javascript node.js mongodb mongoose database


    【解决方案1】:

    将此代码置于连接范围之外。无需为每种类型都创建 Schema 有新的连接事件。

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

    【讨论】:

      【解决方案2】:

      每次有连接进来,就会发出“连接”事件,所以 mongoose.connect("mongodb://localhost:27017/NEW_DB1"); 将执行多次,这会导致错误。

      【讨论】:

        猜你喜欢
        • 2019-03-22
        • 2012-01-27
        • 2020-09-18
        • 2022-07-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-13
        • 1970-01-01
        相关资源
        最近更新 更多