Estoy tratando de obtener los detalles ingresados por el usuario en los campos del formulario para poder editar y actualizar los registros seleccionados. Pero, cuando hago clic en el botón Editar, obtengo campos de formulario en blanco en el formulario.
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); } }); }) No soy capaz de conseguir lo que salió mal. He pasado el valor ingresado por el usuario como req.body . Todas las operaciones funcionan correctamente, pero no se pudieron actualizar los registros porque no puedo obtener la identificación de usuario del formulario.
<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>si está utilizando mongoose y versiones más nuevas de express-handlebars, puede resolverse usando el método lean() después de find() como:
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})
---------------- Otra opción que puedes seguir ----------------------------
express-handlebars no le permite especificar opciones de tiempo de ejecución para pasar a la función de plantilla. Este paquete puede ayudarlo a deshabilitar las comprobaciones de prototipos para sus modelos.
Pasos:
1 - Dependencia de instalación
npm i @handlebars/allow-prototype-access2 - Use este fragmento como ejemplo para reescribir su servidor 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)3 - Ejecuta el servidor y haz tu baile feliz.
Si está usando MySQL, haga una secuencia, use opciones de consulta sin formato {raw: true} y si está usando relaciones, puede usar {nest: true} , por ejemplo:
users = await User.findAll({ where: { username: "SimonAngatia" }, include: [{ model: Tweet, as: "Tweets" }], raw: true, nest: true, }).catch(errorHandler);consulte aquí: Secuela, convierta la entidad en un objeto simple
Puede personalizar documentos antes de la transmisión de datos.
router.get('/list', (req, res) => { Employee.find((err, docs) => { if (!err) { docs= docs.map(item=> item.toObject()) res.render("employee/list", { list: docs, }); } else { console.log('Error in retrieving employee list :' + err); } }); })