我正在尝试在Nodejs / express应用程序中测试POST方法。我已连接到Firebase数据库。 我的问题主要与错误有关。我在做什么错,请问该如何解决?
这是错误报告:
PS C:\ Users \ WorkoutApp_v1>节点app.js
服务器在端口3000上启动错误:Reference.set失败:第一个参数包含未定义的属性'workouts。-Lqkqtcf6e2RED2F_1av.name'
这是带有POST方法的exercise.js文件。
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>
答案 0 :(得分:0)
值undefined
不能写在RTDB中。
当访问不存在的对象属性时,将得到undefined
值。
您的req.body.name
是undefined
,因为req.body
没有name
属性。
您注释掉的console.log(workout)
打印什么?
在编写可能导致在RTDB中编写undefined
的代码时,应将其替换为其他内容。在这种情况下,您可以使用req.body.name || ''
用空字符串替换缺少的name
属性。
通常,使用||
可能会造成麻烦,因为0
和''
之类的值等同于false
,因此它们将被您的默认值替换。 / p>
更安全的做法是value === undefined ? defaultValue : value
。