簡體   English   中英

Node.js使用Mongo創建函數

[英]Node.js create function with mongo

我目前正在嘗試創建一個事件並將其存儲在我的mongo數據庫中。 以下是我當前的事件架構。

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

//blueprint for each new entry in the db
var eventSchema = new Schema({
    eventName: {type:String},
    eventDate: {type:String},
    eventPlace:{type:String},
    eventPrice: {type: Number}

});
module.exports = mongoose.model('Event', eventSchema);

這是我的user.js文件中的創建函數代碼

 // /route for new event
    router.get('/newEvent', function (req,res,next) {
        var messages = req.flash('error');
        res.render('user/newEvent',{csrfToken: req.csrfToken(),messages: messages, hasErrors: messages.length >0});
    });

    //route for new event save
    router.get('/createEvent', function(req, res, next) {

      var event = new Event();
      eventName = req.body.eventName;
      eventDate = req.body.eventDate;
      eventPlace = req.body.eventPlace;
      eventPrice = req.body.eventPrice;

      event.save(function(err) {
        if(err) return next(err);
        res.json({ message : 'Success!'});
      });
    });

這是在newEvent.hbs文件中創建新事件的表單。

    <div class = "row">
            <div class="col-md-4 col-md-offset-4">
                    <h1> Create a new Event</h1>
                {{#if hasErrors}}
                    <div class=alert alert-danger">
                        {{# each messages}}
                            <p>{{this}}</p>
                        {{/each}}
                    </div>
                {{/if}}

                <form action="/user/newEvent" method="post">
                    <div class="form-group">
                    <label for="eventName">Event Name</label>
                    <input type="text" id="eventName" name="eventName"class="form-control">
                </div>

                <div class="form-group">
                    <label for="eventDate">Event Date</label>
                    <input type="text" id="eventDate" name="eventDate" class="form-control">
                </div>

                <div>
                    <label for="eventPlace">Place of Event</label>
                    <input type="text" id="eventPlace" name="eventPlace" class="form-control">
                </div>

                <div>
                    <label for="eventPrice">Price of Event: €</label>
                    <input type="text" id="eventPrice" name="eventPrice" class="form-control">
                </div>

                <input type="hidden" name="_csrf" value="{{ csrfToken}}">
               <a href="createEvent" class="pull-right btn btn-success" role="button">Create Event</a>
            </form>
    </div>

到目前為止,當我運行代碼時,我收到一條錯誤消息,指出eventName,eventPlace,eventDate和eventPrice是必需的,尚未輸入,但是當我從事件模式中刪除“ required:true”時,會創建一個新事件,但沒有數據存儲在數據庫中。

1-您沒有正確保存事件eventName = req.body.eventName

當前,您正在保存空對象,這就是為什么在刪除所需對象時會保存空數據。

2-您還使用帶有請求的req.body您應該使用router.post

檢查下面的代碼

router.post('/createEvent', function(req, res, next) {

  var event = new Event({
    eventName:req.body.eventName,
    eventDate : req.body.eventDate,
    eventPlace : req.body.eventPlace,
    eventPrice : req.body.eventPrice
  });

  event.save(function(err) {
    if(err) return next(err);
    res.json({ message : 'Success!'});
  });
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM