无法使用句柄获取旧的提交值
Cannot get old submitted values using handle bars
我正在尝试获取用户在表单字段中输入的详细信息,以便我可以编辑和更新所选记录。但是,当我单击编辑按钮时,我在表单中看到空白的表单字段。
router.get('/',function(req,res){
res.render('./users/addoredit',{
viewTitle:"Insert User",
user:req.body
})
})
router.post('/',function(req,res){
if(req.body._id==="")
insertRecord(req,res)
else
updateRecord(req,res)
})
function insertRecord(req,res){
const user=new User()
user.name=req.body.name
user.address=req.body.address
user.email=req.body.email
user.mobile=req.body.mobile
user.save((err,docs)=>{
if(!err)
res.redirect('user/list')
else
res.render('./users/addoredit',{
viewTitle:"Insert User",
user: req.body})
})
}
router.get('/list',(req,res)=>{
User.find((err,docs)=>{
if(!err){
res.render('./users/list',{
list:docs
})
}
else{
console.log(err)
}
}).lean()
})
function updateRecord(req,res){
User.findOneAndUpdate({_id:req.body._id},req.body,{new:true},(err,docs)=>{
if(!err)
res.redirect('/user/list')
else
console.log
})
}
router.get('/:id',function(req,res){
User.findById(req.params.id,(err,doc)=>{
if(!err)
res.render('./users/addoredit',{
viewTitle:"Update User",
user:doc
})
else
res.redirect('user/list')
})
})
我通过在 addoredit handlebar 中插入记录来获取传递的值,如下所示:
<form action="/user" method="POST" autocomplete="off">
<div class="form-group">
<input type="hidden" name="_id" value="{{user._id}}">
<label for="name">Name</label>
<input type="text" class="form-control" name="name" placeholder="Enter name" value="{{user.name}}">
</div>
<div class="form-group">
<label for="address">Address</label>
<input type="text" class="form-control" name="address" placeholder="Enter address" value="{{user.address}}">
</div>
<div class="form-group">
<label for="email">Email address</label>
<input type="email" class="form-control" name="email" placeholder="Enter email" value="{{user.email}}">
</div>
<div class="form-group">
<label for="mobile">Mobile</label>
<input type="number" class="form-control" name="mobile" placeholder="Enter mobile number" value="{{user.mobile}}">
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
这是我第一次在 nodejs 中尝试一个项目,所以我不知道哪里出了问题。我已将用户输入的值作为 req.body 传递。所有操作都正常工作,但无法更新记录,因为我无法从表单中获取用户 ID。
上架后编辑删除记录的hbs:
<table class="table table-striped">
<thead>
<tr>
<th>Full Name</th>
<th>Email</th>
<th>Mobile</th>
<th>City</th>
<th></th>
</tr>
</thead>
<tbody>
{{#each list}}
<tr>
<td>{{this.name}}</td>
<td>{{this.address}}</td>
<td>{{this.email}}</td>
<td>{{this.mobile}}</td>
<td>
<a href="/user/{{this._id}}"><i class="fa fa-pencil fa-lg"></i></a>
<a href="/user/delete/{{this._id}}" onclick="return confirm('Are you sure to delete this record ?');"><i class="fa fa-trash fa-lg" aria-hidden="true"></i></a>
</td>
</tr>
{{/each}}
</tbody>
我收到了之前没有注意到的以下错误:
Handlebars: Access has been denied to resolve the property "_id" because it is not an "own property" of its parent.
You can add a runtime option to disable the check or this warning:
我认为问题出在车把的值传递上,但 handlebar.This 的版本解决了我的问题:
npm install handlebars@4.5.3
我认为,如果您使用的是 mongoose 和较新版本的 express-handlebars,可以通过在 find() 之后使用 lean() 方法来解决
喜欢:
User.find().lean()
npm install @handlebars/allow-prototype-access
*安装上述评论后,转到下面给出的站点并粘贴代码 (用法(express-handlebars 和 mongoose))
https://www.npmjs.com/package/@handlebars/allow-prototype-access.
我正在尝试获取用户在表单字段中输入的详细信息,以便我可以编辑和更新所选记录。但是,当我单击编辑按钮时,我在表单中看到空白的表单字段。
router.get('/',function(req,res){
res.render('./users/addoredit',{
viewTitle:"Insert User",
user:req.body
})
})
router.post('/',function(req,res){
if(req.body._id==="")
insertRecord(req,res)
else
updateRecord(req,res)
})
function insertRecord(req,res){
const user=new User()
user.name=req.body.name
user.address=req.body.address
user.email=req.body.email
user.mobile=req.body.mobile
user.save((err,docs)=>{
if(!err)
res.redirect('user/list')
else
res.render('./users/addoredit',{
viewTitle:"Insert User",
user: req.body})
})
}
router.get('/list',(req,res)=>{
User.find((err,docs)=>{
if(!err){
res.render('./users/list',{
list:docs
})
}
else{
console.log(err)
}
}).lean()
})
function updateRecord(req,res){
User.findOneAndUpdate({_id:req.body._id},req.body,{new:true},(err,docs)=>{
if(!err)
res.redirect('/user/list')
else
console.log
})
}
router.get('/:id',function(req,res){
User.findById(req.params.id,(err,doc)=>{
if(!err)
res.render('./users/addoredit',{
viewTitle:"Update User",
user:doc
})
else
res.redirect('user/list')
})
})
我通过在 addoredit handlebar 中插入记录来获取传递的值,如下所示:
<form action="/user" method="POST" autocomplete="off">
<div class="form-group">
<input type="hidden" name="_id" value="{{user._id}}">
<label for="name">Name</label>
<input type="text" class="form-control" name="name" placeholder="Enter name" value="{{user.name}}">
</div>
<div class="form-group">
<label for="address">Address</label>
<input type="text" class="form-control" name="address" placeholder="Enter address" value="{{user.address}}">
</div>
<div class="form-group">
<label for="email">Email address</label>
<input type="email" class="form-control" name="email" placeholder="Enter email" value="{{user.email}}">
</div>
<div class="form-group">
<label for="mobile">Mobile</label>
<input type="number" class="form-control" name="mobile" placeholder="Enter mobile number" value="{{user.mobile}}">
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
这是我第一次在 nodejs 中尝试一个项目,所以我不知道哪里出了问题。我已将用户输入的值作为 req.body 传递。所有操作都正常工作,但无法更新记录,因为我无法从表单中获取用户 ID。
上架后编辑删除记录的hbs:
<table class="table table-striped">
<thead>
<tr>
<th>Full Name</th>
<th>Email</th>
<th>Mobile</th>
<th>City</th>
<th></th>
</tr>
</thead>
<tbody>
{{#each list}}
<tr>
<td>{{this.name}}</td>
<td>{{this.address}}</td>
<td>{{this.email}}</td>
<td>{{this.mobile}}</td>
<td>
<a href="/user/{{this._id}}"><i class="fa fa-pencil fa-lg"></i></a>
<a href="/user/delete/{{this._id}}" onclick="return confirm('Are you sure to delete this record ?');"><i class="fa fa-trash fa-lg" aria-hidden="true"></i></a>
</td>
</tr>
{{/each}}
</tbody>
我收到了之前没有注意到的以下错误:
Handlebars: Access has been denied to resolve the property "_id" because it is not an "own property" of its parent.
You can add a runtime option to disable the check or this warning:
我认为问题出在车把的值传递上,但 handlebar.This 的版本解决了我的问题:
npm install handlebars@4.5.3
我认为,如果您使用的是 mongoose 和较新版本的 express-handlebars,可以通过在 find() 之后使用 lean() 方法来解决 喜欢:
User.find().lean()
npm install @handlebars/allow-prototype-access
*安装上述评论后,转到下面给出的站点并粘贴代码 (用法(express-handlebars 和 mongoose))
https://www.npmjs.com/package/@handlebars/allow-prototype-access.