Hap*_*tel 3 mongoose mongodb node.js express express-handlebars
我试图获取用户在表单字段中输入的详细信息,以便我可以编辑和更新所选记录。但是,当我单击编辑按钮时,我在表单中看到空白表单字段。
router.get('/list', (req, res) => {
Employee.find((err, docs) => {
if (!err) {
res.render("employee/list", {
list: docs,
});
}
else {
console.log('Error in retrieving employee list :' + err);
}
});
})
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚出了什么问题。我已将用户输入的值传递为req.body
。所有操作都正常工作,但无法更新记录,因为我无法从表单中获取用户 ID。
<tbody>
{{#each list}}
<tr>
<td>{{this.name}}</td>
<td>{{this.email}}</td>
<td>{{this.mobile}}</td>
<td>{{this.city}}</td>
<td>
<a href="/employee/{{this._id}}"><i class="fa fa-pencil fa-lg" aria-hidden="true"></i></a>
<a href="/employee/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>
Run Code Online (Sandbox Code Playgroud)
如果您使用 mongoose 和较新版本的express-handlebars,可以通过在find()之后使用lean()方法来解决,如下所示:
router.get('/list', (req, res) => {
Employee.find((err, docs) => {
if (!err) {
res.render("employee/list", {
list: docs,
});
}
else {
console.log('Error in retrieving employee list :' + err);
}
})**.lean()**; // It is prevent the warning when trying to display records
Run Code Online (Sandbox Code Playgroud)
})
---------------- 您可以遵循的另一个选项 ----------------------------------------
express-handlebars 不允许您指定传递给模板函数的运行时选项。该软件包可以帮助您禁用模型的原型检查。
脚步:
1 - 安装依赖项
npm i @handlebars/allow-prototype-access
Run Code Online (Sandbox Code Playgroud)
2 - 使用此代码片段作为示例来重写您的 Express 服务器
const express = require('express')
const path = require('path')
**const Handlebars = require('handlebars')**
**const hbs = require('express-handlebars');**
const bodyParser = require('body-parser');
**const { allowInsecurePrototypeAccess } = require('@handlebars/allow-prototype-access');**
const employeeController = require('./controller/employeeController')
const app = express()
app.use(bodyParser.urlencoded({ extended: true }))
app.use(bodyParser.json())
app.set('views', path.join(__dirname, '/views/'))
app.engine('hbs', hbs({ extname: 'hbs', defaultLayout: 'mainLayout', layoutsDir: __dirname + '/views/layouts/', **handlebars: allowInsecurePrototypeAccess(Handlebars)** }))
app.set('view engine', 'hbs')
app.listen(3000, () => {
console.log('Server started at port 3000')
})
app.use(employeeController)
Run Code Online (Sandbox Code Playgroud)
3 - 运行服务器并跳起你快乐的舞蹈。
归档时间: |
|
查看次数: |
4703 次 |
最近记录: |