【问题标题】:NodeJS Express: Repopulate form after error foundNodeJS Express:发现错误后重新填充表单
【发布时间】:2019-03-25 20:41:05
【问题描述】:

我想我真的很接近解决这个问题了。我只是在发现错误后尝试重新填充我的表单数据。在下面的示例中,age 和血小板计数都应该重新填充,但它们不会。

模型名称:Store.js

storeController.js

exports.store_create_post = [

    body('age', 'Please enter age').isLength({ min:1 }),
    body('platelet_count', 'Please enter platelet count').isLength({ min: 1 }),


    // sanitizeBody('age').escape(),

    (req, res, next) => {
        //Extract the validation errors from a request.
        const errors = validationResult(req);

        //Store form values for post data when error caught
        var predModel = new Store(
                { 
                    age: req.body.age, 
                    platelet_count: req.body.platelet_count
                }
        );

        if (!errors.isEmpty()) {
            //Validation or Sanitation checks did not pass
            res.render('predictionModel', {title: 'Risk Calculator', Store: predModel, errors: errors.array()});
            return;

        }

我认为我的问题是我无法弄清楚 res.render (Store: predModel) 中的参数在做什么。我可以向后切换参数(predModel:Store),它仍然可以正常工作。

这是我的路线:

index.js

//Get request for PredctionModel Form
router.get('/predictionModel', storeController.store_create_get);

//Post request for PredictionModel
router.post('/predictionModel', storeController.store_create_post);

感谢任何建议。

更新。这是我的表单页面,大部分内容已删除以便于查看:

_modelForm.pug

mixin predictionModelForm(store = {})


    form(action="/predictionModel" method="POST" class="card")

        label(for="age") How old is the patient (years)?    
            input(type='number', name='age', style='width: 100px;', placeholder="40-89")

        input(type="submit" value="Predicted Risks" class="button" style='width: 50%;')

【问题讨论】:

  • 你能附上包含表格的文件吗?
  • 我更新了我的帖子以包含表单内容

标签: node.js forms validation express


【解决方案1】:

不要将构造函数用作渲染对象。定义一个简单的对象

var predModel = { 
    age: req.body.age, 
    platelet_count: req.body.platelet_count 
} 

然后像这样渲染它

res.render('predictionModel', {title: 'Risk Calculator', predModel: predModel, errors: errors.array()});

在您的输入中,您可以通过这种方式增加价值。

input(type='number', name='age', style='width: 100px;', value=predModel.age, placeholder="40-89")

另外,由于您渲染的是同一个 pug 文件,您应该检查您渲染的属性(例如 predModel)是否未定义。

【讨论】:

  • 谢谢,我会试试这个。到目前为止,我有: value=(undefined===predModel ? '' : predModel.age),基于我发现的东西。不过还不行。
  • 试试这个value=(predModel ? predModel.age : ' ')
  • 这也不起作用,但至少感觉更干净。
  • 不,但我发现如果我这样做:value=(predModel ? predModel.age : '3'),如果我重新打开页面,则会显示值 3。但是,如果我提交表单并遇到错误,占位符文本将占据它的位置而不是 3。所以似乎在我点击提交后,它没有读取值
  • 我认为它是将年龄读取为字符串,因为字符串似乎也不起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-19
  • 2012-06-03
  • 2021-03-10
  • 2018-04-11
  • 2011-04-11
  • 2016-04-27
相关资源
最近更新 更多