Ошибка: Reference.set не удалось: первый аргумент содержит неопределенный в свойстве - PullRequest
1 голос
/ 09 октября 2019

Я пытаюсь проверить метод POST в приложении Nodejs / express. Я подключился к базе данных Firebase. Мой вопрос в основном связан с ошибкой. Что я делаю не так и как я могу это исправить, пожалуйста?

Это сообщение об ошибке:

PS C: \ Users \ WorkoutApp_v1> узел app.js
Серверзапущен на порту: 3000

Ошибка : Reference.set не удалось: первый аргумент содержит неопределенное значение в свойстве 'workouts.-Lqkqtcf6e2RED2F_1av.name'

ЭтоФайл workout.js с методом POST.

const express = require('express');
const router = express.Router();
const firebase = require('firebase');


router.get('/add', function(req,res,next) {
    res.render('workouts/add');
});

router.post('/add', function(req,res,next) {
     var workout = {
       name: req.body.name,
       discription: req.body.discription,
       set: req.body.set,
       repsTime: req.body.repsTime
     }
    // console.log(workout);
    // return;

    // const fbRef = firebase.database().ref();
    // var dbRef = fbRef.child('workouts');
    // dbRef.push().set(workout);


    // alternative implementation of the above 3-lines
    firebase.database().ref().child('workouts').push().set(workout);

    req.flash('success_msg', 'Workout saved');
    res.redirect('/workouts');
});

module.exports = router;

Это файл add.ejs.

   <form method="post" action="/workouts/add">
  <div class="form-group">
    <label>Exercise</label>
    <input type="text" class="form-control" name="name" placeholder="Workout Name">
    <label>Description</label>
    <input type="text" class="form-control" name="description" placeholder="Description">
    <label>Set</label>
    <input type="text" class="form-control" name="sets" placeholder="Number of sets">
    <label>RepsTime</label>
    <input type="text" class="form-control" name="repsTime" placeholder="Number of repsTime">
  </div>
  <button type="submit" class="btn btn-default">Submit</button>
   <a class="btn btn-danger" href="/workouts">Close</a>
</form>

1 Ответ

0 голосов
/ 09 октября 2019

Значение undefined нельзя записать в RTDB.

Значение undefined - это то, что вы получаете, когда получаете доступ к свойствам объекта, которые не существуют.

Ваш req.body.name равно undefined, поскольку req.body не имеет свойства name.

Что печатает ваш закомментированный console.log(workout)?

Когда вы пишете код, который может привести к записи undefined в RTDB, вы должны заменить его чем-то другим. В этом сценарии вы можете использовать req.body.name || '', чтобы заменить отсутствующее свойство name пустой строкой.

Как правило, использование || может вызвать проблемы, поскольку такие значения, как 0 и '' эквивалентны false, поэтому они будут заменены вашим значением по умолчанию.

Более безопасным является value === undefined ? defaultValue : value.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...