La base de datos se insertó correctamente pero this.lastID no está definido. ¿Alguien puede ayudarme qué está mal con este código?
app.post('/products/create', (req,res) => { upload(req, res, (err) => { const name = req.body.name const description = req.body.description const Filename = req.file.filename const id = this.lastID console.log(id) //console.log('Selected Files: ' + req.Filename); db.uploadPost(name, description, Filename, function(error){ if(error){ console.log(err) } else{ console.log(this.lastID) res.redirect('/products/'+id) } }) }) })y mi base de datos
exports.uploadPost = function(name, description, Filename, callback){ const query = "INSERT INTO products('name', 'description', 'image') VALUES (?,?,?)" const values = [name, description, Filename] db.run(query,values, function(error){ callback(error) }) }En el contexto del método de carga, la propiedad this.lastID no está disponible porque ejecuta la consulta de inserción en una etapa posterior.
Una solución sería la siguiente:
exports.uploadPost = function(name, description, Filename, callback){ const query = "INSERT INTO products('name', 'description', 'image') VALUES (?,?,?)" const values = [name, description, Filename] db.run(query,values, function(error){ callback(error, this.lastID) // pass the computed lastID as a parameter of the callback }) }Y luego cambia:
app.post('/products/create', (req,res) => { upload(req, res, (err) => { const name = req.body.name const description = req.body.description const Filename = req.file.filename db.uploadPost(name, description, Filename, function(error, id){ if(error){ console.log(err) } else{ // use the passed id here, after the insertion query has been executed successfully console.log(id) res.redirect('/products/'+id) } }) }) })