如何使用Sequelize更新记录?

时间:2017-03-07 16:33:03

标签: node.js sequelize.js

我正在尝试使用Sequelize更新表格中的记录。 不幸的是,我试图更新的事件的ID似乎是未定义的。我怎样才能正确发送?

我控制器中的代码块如下所示:

ItemsSource

尽管用户在编辑事件时引入值的HTML文件如下所示:

router.get('/edit/:eventid', function(req, res) {
    var eventid = req.params.eventid;
    Event.findById(req.params.eventid).then(function(event) {
        eventid= event.eventid;
        title= event.title;
        description= event.description;     
        availabletickets=event.availabletickets;
        date= event.date;        
        newDate= date.toString();
        newdate= newDate.substring(0,21);

         console.log(eventid);
        }) .then(function() {
            res.render('eventEdit', {
                eventid: eventid, 
                pagetitle: ' Edit Event',
                title: title,
                description:description,
                availabletickets:availabletickets,
                newdate: newdate,              
            });
        })
        .catch(function(error) {
            res.render('error', {
                error: error
            });
        });       
});

router.post('/edit', function(req, res){
   var eventid = req.body.eventid;
   var title = req.body.title;    
   var description = req.body.description;
   var availabletickets= req.body.availabletickets;
   var date = req.body.date;
  console.log( eventid); //this returns undefined.
  console.log('title, description, availabletickets, date);

  const newData = {  
     title: title,
       date: date,
       description: description,
       availabletickets: availabletickets
  };

    Event.update(
    newData,
      {    
      where:{
        eventid:eventid
        }
       }
  ).then(function() {
         console.log("Event updated");
        res.redirect('/events');
    }).catch(e => console.error(e));

});

1 个答案:

答案 0 :(得分:2)

您将eventid作为undefined,因为req.body不包含eventid(它未从客户端传递)。要从客户端传递它,您必须添加具有name="eventid"属性的输入。

在EJS模板中,您需要将eventid值呈现为hidden输入(<input type="hidden" ...

您可以在表单中添加以下内容:

<input type="hidden" value="<%= eventid %>" name="eventid" />

这是更新的表单代码:

<div class="container">
  <h2><%= pagetitle %> </h2>

  <form method="post" action="/events/edit">
    <input type="hidden" value="<%= eventid %>" name="eventid" />
    <div class="container">
      <div class="col-md-12 ">
        <div class="row">
          <div class="col-md-12 ">
            <input class="form-control" type="text" name="title" id="title" value="<%= title %>" placeholder="Titlu Eveniment" required="true">
            <p style="color:#8B0000;"><small>*This field is mandatory</small></p>
            <textarea rows=7 class="form-control" type="text" name="description" id="description" placeholder="Descriere Eveniment">
              <%= description %>
            </textarea>
            <br>
            <input class="form-control" type="text" name="availabletickets" id="availabletickets" value="<%= availabletickets %>">
            <br>
            <label> Data:
              <%= newdate %>
            </label>
            <br/>
            <label>Cahnge event date:</label>
            <input class="form-control" type="date" name="date" id="date" style="width:190px;">
            <br>

            <button class="btn" id="addValue" style="background-color:#8B0000; color:white;">Save</button>&nbsp;
            <button class="btn btn-warning">Cancel</button>
          </div>
        </div>
      </div>
    </div>
  </form>
</div>
相关问题