2017-03-18 13 views
1

私は最新の4キーストーンを使用しています。 demo app contact form codeに基づいて、2つの日付を追加するフォームを作成しました。私の問題は、フォームの提出時に、私は500エラーを取得しています "未定義のbookedFrom 'プロパティを読み取ることができません...あなたはこれを追跡するのを助けることができますか?ありがとうございました!フォーム提出問題:フォーム提出時に未定義のプロパティを読み取ることができません

私のコードは次のとおりです。

テンプレート/ビュー/ booking.jade

extends ../layouts/default 

block content 
    form(method='post').form-horizontal 
     input(type='hidden', name='action', value='booking.create') 
     .form-group 
      label.col-sm-2.text-left.control-label From 
      .col-sm-10 
       input(type='date' name='bookedFrom' value=formData.bookedFrom required placeholder="2018-01-01").form-control 
     .form-group 
      label.col-sm-2.control-label To 
      .col-sm-10 
       input(type='date' name='bookedTo' value=formData.bookedTo required placeholder="2018-12-31").form-control 
     .form-group 
     button(type='submit').btn.btn-primary Book 

ルート/ビュー/ booking.js

var keystone = require('keystone'); 
var Booking = keystone.list('Booking'); 

exports = module.exports = function (req, res) { 

    var view = new keystone.View(req, res); 
    var locals = res.locals; 

    // Set locals 
    locals.section = 'booking'; 
    locals.formData = req.body || {}; 
    locals.validationErrors = {}; 
    locals.bookingSubmitted = false; 

    view.on('post', { action: 'booking.create' }, function (next) { 

     var newBooking = new Booking.model({ 
      bookedFrom: locals.FormData.bookedFrom, 
      bookedTo: locals.FormData.bookedTo 
     }); 
     var updater = newBooking.getUpdateHandler(req); 

     updater.process(req.body, { 
      fields: 'bookedFrom, bookedTo', 
      flashErrors: true 
     }, function (err,res) { 
      if (err) { 
       locals.validationErrors = err.errors; 
      } else { 
       locals.bookingSubmitted = true; 
      } 
      next(); 
     }); 
    }); 

    // Render the view 
    view.render('booking'); 

}; 

モデル/ Booking.js

var keystone = require('keystone'); 
var Types = keystone.Field.Types; 

var Booking = new keystone.List('Booking', { track: true }); 

/** 
* Booking Model 
* ============= 
*/ 

Booking.add({ 
    bookedFrom: { type: Types.Date, index: true }, 
    bookedTo: { type: Types.Date, index: true }, 
}); 

Booking.track = true; 
Booking.defaultSort = '-createdAt'; 
Booking.defaultColumns = 'createdBy, bookedFrom, bookedTo'; 
Booking.register(); 

ルート/ index.js

var keystone = require('keystone'); 
var middleware = require('./middleware'); 
var importRoutes = keystone.importer(__dirname); 

// Common Middleware 
keystone.pre('routes', middleware.initLocals); 
keystone.pre('render', middleware.flashMessages); 

// Import Route Controllers 
var routes = { 
    views: importRoutes('./views'), 
}; 

// Setup Route Bindings 
exports = module.exports = function (app) { 
    // Views 
    app.get('/', routes.views.index); 
    app.all('/booking', middleware.requireUser, routes.views.booking); 
}; 

答えて

0

あなたはあなたの変数名にタイプミスがあります。 locals.formData変数をインスタンス化しますが、後でlocals.FormDataと参照してください。後者の変数は定義されていないため、500のエラーが発生します。モデル作成時に参照されている変数の名前を変更します。

var newBooking = new Booking.model({ 
    bookedFrom: locals.formData.bookedFrom, 
    bookedTo: locals.formData.bookedTo 
}); 
+0

それは私の問題を解決しました - ありがとうございました! –

関連する問題