我在查询中传递函数时遇到麻烦。当我运行不带该功能的代码时,可以正常工作。邮递员将其卡在“发送请求”上
例:
save() { return db.query( { sql: "INSERT INTO contenido (titulo, extencion_archivo, fecha_publicacion) VALUES (?, ?, ?)", values: [this.titulo, this.extension, this.fecha] }, function(err, res, fields) { //More code } ); } 以下代码可以正常工作:
save() { return db.query( { sql: "INSERT INTO contenido (titulo, extencion_archivo, fecha_publicacion) VALUES (?, ?, ?)", values: [this.titulo, this.extension, this.fecha] } ); } 我如何调用保存方法:
exports.addVideo = (req, res, next) => { const titulo = req.body.titulo; const extension = req.file.mimetype.split("/")[1]; const fecha = new Date(); const videoUrl = req.file.filename; const video = new Videos(null, titulo, extension, fecha, videoUrl); video.save().then(() => { res.json('sending') })
};
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
从你的描述来看,问题似乎出在异步处理和回调函数的使用上。在第一个例子中,你尝试在save()
方法里直接返回一个查询操作,并且这个查询操作包含了一个回调函数来处理错误和结果。然而,当没有正确处理这个异步操作时,调用方(如addVideo
中的video.save().then()
)可能无法识别或等待这个操作完成。
为了解决这个问题,你可以考虑使用Promise或者async/await来更好地管理异步操作。以下是使用Promise重写save()
方法的一个示例:
save() {
return new Promise((resolve, reject) => {
db.query({
sql: "INSERT INTO contenido (titulo, extencion_archivo, fecha_publicacion) VALUES (?, ?, ?)",
values: [this.titulo, this.extension, this.fecha]
}, function(err, res, fields) {
if (err) {
reject(err);
} else {
resolve(res);
}
});
});
}
然后,在addVideo
中,你可以继续使用.then()
来处理成功的情况,或者添加.catch()
来捕获任何错误:
exports.addVideo = (req, res, next) => {
const titulo = req.body.titulo;
const extension = req.file.mimetype.split("/")[1];
const fecha = new Date();
const videoUrl = req.file.filename;
const video = new Videos(null, titulo, extension, fecha, videoUrl);
video.save()
.then(() => {
res.json('sending');
})
.catch(err => {
// 处理错误,例如:res.status(500).json({ error: 'An error occurred' });
console.error(err);
res.status(500).send('Error saving video');
});
};
这样修改后,你应该能够正确地处理数据库查询的异步操作,并且在请求中得到预期的响应。