首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果我console.log我的结果,它会显示,但如果我返回它,它不会

问如果我console.log我的结果,它会显示,但如果我返回它,它不会
EN

Stack Overflow用户
提问于 2018-06-10 02:06:27
回答 1查看 25关注 0票数 0

我的返回结果并没有完全返回到API端点。你知道我做错了什么吗?

app.js

代码语言:javascript
复制
const express = require('express');
const app = express();

app.use(express.static('client'));
var GetContracts = require('./contractsService');

app.get('/contracts', async (req, res) => {
    var results = await GetContracts.get();
    console.log(results);
    res.send(results);
});

module.exports = app;

contractsService.js

代码语言:javascript
复制
var mysql = require('mysql');
const config = require('./config')

var con = mysql.createConnection({
    host: config.HOST,
    user: config.USER,
    password: config.PASSWORD,
    database: config.DATABASE
});


exports.get = function () {
    con.connect(function (err) {
        if (err) {
            throw new Error('Error by Rodney')
        };
        con.query("SELECT * FROM " + config.DATABASE + ".Contracts", function (err, result, fields) {
            if (err) {
                throw new Error('Error by Rodney')
            };
            return result;
            //console.log(result); //works
        });
    });
}
EN

回答 1

Stack Overflow用户

发布于 2018-06-10 03:07:58

query方法接受不受返回值影响的错误优先回调。GetContracts.get不会返回承诺,awaiting也不会做任何事情。

为了在promise控制流程中使用,应该对其进行简化:

代码语言:javascript
复制
exports.get = function () {
    return new Promise((resolve, reject) => {
        con.connect(function (err) {
            if (err) {
                reject(new Error('Error by Rodney'))
            };
            con.query("SELECT * FROM " + config.DATABASE + ".Contracts", function (err, result, fields) {
                if (err) {
                    reject(new Error('Error by Rodney'));
                } else
                    resolve(result);
            });
        });
    });
}

或者最好使用现有的基于promise的MySQL库,如promise-mysql,如下所示:

代码语言:javascript
复制
var mysql = require('promise-mysql');

const conPromise = mysql.createConnection({
    host: config.HOST,
    user: config.USER,
    password: config.PASSWORD,
    database: config.DATABASE
});


exports.get = async () => {
    const con = await conPromise;
    const result = await con.query("SELECT * FROM " + config.DATABASE + ".Contracts");
    return result;
};
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50777158

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档