代码之家  ›  专栏  ›  技术社区  ›  alt-rock

promise返回node module.exports中未定义的

  •  0
  • alt-rock  · 技术社区  · 7 年前

    undefined 尝试登录时 routes.js queries.js . 我应该如何更改承诺以正确返回对的响应 路线.js ?

    在里面 :

    const rsClient = require('./client.js');
    
    const query = {
        one: 'SELECT * FROM my.db'
    }
    
    module.exports = {
        rsProdRecs: (req, res) => {
             rsClient.query(query.one)
                .then(res => {
                    return res;
                })
                .catch(err => console.log(err));
        }
    };
    

    在里面 路线.js

    var express = require('express');
    var router = express.Router();
    var queries = require('../queries');
    
    router.get('/', function(req, res, next) {
      const data = queries.rsProdRecs();
      console.log(data)
      res.send(data);
    });
    
    module.exports = router;
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   Jake Holzinger    7 年前

    rsProdRecs . 这个 then catch

    module.exports = {
        rsProdRecs: (req, res) => {
            return rsClient.query(query.one);
    
            // This is redundant, you're not transforming res in any way so this can be omitted.
            // .then(res => {
            //     return res;
            // })
    
            // This will cause the promise to return 'undefined' if rsClient.query(...) rejects,
            // instead error handling should be done in the calling function.
            // .catch(err => console.log(err));
        }
    };
    

    你可以重构你的路线来正确使用你的 Promise 退货方式:

    router.get('/', function (req, res, next) {
        // We cannot consume the "data" directly, we must wait for the promise to resolve.
        queries.rsProdRecs()
            .then((data) => {
                console.log(data);
                res.send(data);
            })
            .catch((err) => {
                console.log(err);
                res.status(500); // insert correct error response here
            });
    
    });
    

    或使用 async/await

    router.get('/', async function (req, res, next) {
        try {
            const data = await queries.rsProdRecs();
            console.log(data);
            res.send(data);
        } catch (e) {
            console.log(err);
            res.status(500);
        }
    });
    
        2
  •  2
  •   Andry Shutka    7 年前

    你试过添加吗 return 声明?

    rsProdRecs: (req, res) => {
             return rsClient.query(query.one)
                .then(res => {
                    return res;
                })
                .catch(err => console.log(err));
        }
    
    
    推荐文章