【问题标题】:node.js saving form data using mongoose/mongodb/express has errors and wont work?node.js 使用 mongoose/mongodb/express 保存表单数据有错误并且不起作用?
【发布时间】:2015-08-15 16:33:19
【问题描述】:

我正在使用 express 和 mongoose 将我的表单数据保存到我的 mongodb 数据库,但该操作无法正常工作,因为它给了我一个错误,即我的模型未注册。我的代码:

index.ejs

<!DOCTYPE html>
<html>
<head>
    <title>Admin-Page</title>
</head>

<body>
<h1>admin-dashboard-interest</h1>
<form method="post" action="">
    <label for="select1">min select:</label>
    <select name="interest_active_user_min" id="select1">
        <option value="1">1</option>
        <option value="2">2</option>
    </select>

    <label for="select2">max select:</label>
    <select name="interest_active_user_max" id="select2">
        <option value="1">1</option>
        <option value="2">2</option>
    </select>
    <input type="submit">
</form>
</body>
</html>

schema.js

var InterestSchema = new Schema({
    settings: {
        admin_settings: {
            interest_settings: {
                interest_pending_user_settings: {
                        type: Number,
                        max: 100,
                        default: 0
                },

                interest_pending_user_value: {
                    type:[String]
                },

                interest_active_user:{
                    type:Number,
                    max:1000,
                    default:0
                },

                interest_active_user_max: {
                    type: Number,
                    max:1000,
                    default:100
                },

                interest_active_user_min: {
                    type: Number,
                    max:1000,
                    default: 5
                },

                active_interest: [{
                    name: {
                        type:[String],
                        unique:true
                    },
                    creator: {
                        type: mongoose.Schema.Types.ObjectId,
                        ref: 'User'
                    },
                    timestamp: {
                        type:Date,
                        default: Date.now
                    }
                }],

                pending_interest: [{
                    name: {
                        type:[String],
                        unique:true
                    },
                    creator: {
                        type: mongoose.Schema.Types.ObjectId,
                        ref: 'User'
                    },
                    timestamp: {
                        type:Date,
                        default: Date.now
                    }
                }],

                declined_interest: [{
                    name: {
                        type:[String],
                        unique:true
                    },
                    creator: {
                        type: mongoose.Schema.Types.ObjectId,
                        ref: 'User'
                    },
                    timestamp: {
                        type:Date,
                        default:Date.now
                    }
                }],

                removed_interest: [{
                    name: {
                        type:[String],
                        unique:true
                    },
                    creator: {
                        type: mongoose.Schema.Types.ObjectId,
                        ref: 'User'
                    },
                    timestamp: {
                        type:Date,
                        default: Date.now
                    }

                }]

            }
        }
    }
});
   var Int = mongoose.model('Interest', InterestSchema);

server.js

var mongoose = require('mongoose');
var express = require('express');
var app = express();
var port = process.env.PORT || 8080;

var morgan = require('morgan');
var bodyParser = require('body-parser');

var uri = 'mongodb://localhost/interest';
var db = require('mongoose').connect(uri);

app.use(morgan('dev'));
app.use(bodyParser.urlencoded({
    extended: true
}));
app.set('view engine', 'ejs');

app.listen(port);

console.log('shit happens on port ' + port);

app.get('/', function(req,res){
   res.render('index.ejs');
});



app.post('/', function(req,res){
var content = new Int(req.body.content);
    content.save(function(err){
        if(err){
            return handleError(err);
        } else {
            console.log('your form has been saved');
        }
    })
});


require('./models/schema.js');

我收到一个错误“Int is not defined”,这是我用来注册我的猫鼬模型的变量。我还需要我的 server.js 中的猫鼬文件,所以我看不出哪里出错了。

【问题讨论】:

  • 寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及重现它所需的最短代码在问题本身。没有明确的问题陈述的问题对其他读者没有用处。
  • 另外,请不要使用sn-p,除非代码可以在浏览器中实际运行。
  • 您既没有从 schema.js 导出 Int 模型,也没有在 server.js 中导入它。 Int 变量在 server.js 中不可用,除非您使用 require 导入它。
  • 我确实需要('./models/schema.js') 这还不够吗?我还必须采取哪些步骤?

标签: javascript node.js mongodb express mongoose


【解决方案1】:

在 schema.js 中替换

var Int = mongoose.model('Int', InterestSchema);

并在 server.js 中添加

var Int = mongoose.model('Int');

现在可以使用了。

添加var mongoose = require('mongoose'); 输入schema.js

并且架构应该匹配。

【讨论】:

  • 嗨,架构正在保存到我的数据库中,但没有填充字段?
  • 您是否按照上述说明进行操作?这可能是因为您使用的是var content = new Int(req.body.content);,所以您的content 应该与您的模型中写入的架构完全相同。因此,由于您的请求正文与架构不匹配,因此不会被保存。
  • 是的,我按照上述说明进行操作。你是什​​么意思我的“内容”应该完全相同?在哪个部分?我添加了内容,因为我认为我必须指定表单提交。
  • 如果我只使用req.body会有什么不同吗?而不是 req.body.content
  • 其实我想说的是,如果你的架构是{a : String, b : Number} ,那么var content = new Int(data); content.save(function(err){});中的data也应该是{a : String, b : Number}
【解决方案2】:

在您的 schema.js 中将最后一行更改为

exports.Int = mongoose.model('Interest', InterestSchema);

在 server.js 中(删除最后一行)

var Int = require('./schema);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多