鍍金池/ 問答/網絡安全  HTML/ nodejs如何異步返回數據?

nodejs如何異步返回數據?

星號那一排會打印出undefined,
search函數中該被return的數據是有我需要的數據的,
頁面也收不到數據,哪里除了問題???

頁面請求的數據格式是

await axios
    .get("/api/", {
        params: {
            type: "search",
            searchtext: this.searchtext
        }
    })
    .then(function(response) {
        if (response.data.result == "success") {
            // Do something
        } else if (response.data.result == "safetytest") {
            // Do something
        }
    })
    .catch(function(error) {
            // Do something
    });

服務器:

// 監(jiān)聽路徑
app.get("/api/", function (req, res) {
    var resdata = {};
    // 查看是否為查詢
    switch (req.query["type"]) {
        case "search":
            search(req.query["searchtext"])
            // ***************************************
            .then(resdata => { console.log(resdata); res.json(resdata) })
            .catch(e => { console.log });
            break;
        case "***":
            // other
            break;
        default:
            // other
    }
});
async function search(searchtext) {
    var resdata = {};
    // 安全檢查
    if (safetytest(searchtext)) {
        pool.getConnection(function (err, connection) {
            if (err) throw err;
            connection.query(
                "SELECT * FROM `***` where ***=?",
                searchtext,
                function (err, result) {
                    if (err) throw err;
                    resdata = {
                        uid: result[0].uid,
                        aname: result[0].aname,
                        lng: result[0].lng,
                        lat: result[0].lat,
                        address: result[0].address,
                        telephone: result[0].telephone
                    };
                    return resdata;
                }
            );
        });
    }
}
回答
編輯回答
敢試

pool.getConnectionconnection.query如果沒有promise/async寫法的話,你就手動實現各promise吧。

function search(searchtext) {
    return new Promise((resolve, reject) => {
        var resdata = {};
        if (safetytest(searchtext)) {
            pool.getConnection(function (err, connection) {
                if (err) reject(err); // reject
                connection.query(
                    function (err, result) {
                        if (err) reject(err); // reject
                        resdata = {
                        };
                        resolve(resdata); // resolve
                    }
                );
            });
        }
    })
}

有的話可能就是這樣了。

async function search(searchtext) {
    var resdata = {};
    // 安全檢查
    if (safetytest(searchtext)) {
        try {
            const connection = await pool.getConnection()
            const resdata = await connection.query()
            return resdata
        } catch (err) {
            throw err
        }
    }
}
2017年12月18日 22:48