开发者社区 问答 正文

节点mysql无法获得查询响应

我在查询中传递函数时遇到麻烦。当我运行不带该功能的代码时,可以正常工作。邮递员将其卡在“发送请求”上

例:

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') })

};

展开
收起
保持可爱mmm 2019-11-15 11:32:57 351 分享 版权
阿里云 AI 助理回答

从你的描述来看,问题似乎出在异步处理和回调函数的使用上。在第一个例子中,你尝试在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');
        });
};

这样修改后,你应该能够正确地处理数据库查询的异步操作,并且在请求中得到预期的响应。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答