首页 > 解决方案 > 控制器和服务之间没有传递参数

问题描述

我有一些非常简单的代码,我想深入了解这个概念:

控制器.js:

router.get('/retrieve-sound-id', retrieveSoundID);

module.exports = router;

async function retrieveSoundID(req, res, next) {
    const customer_id = req.body['customer-id'];
    const file_name = req.body['file-name'];
    
    fileService.retrieveSoundID(customer_id, file_name).then(function(val) {
        res.send(val);
    });
}

服务.js:

const mysql = require('mysql');

module.exports = {
    retrieveSoundID
};

function retrieveSoundID({ customer_id, file_name  }) {
  return new Promise((resolve, reject) => {
    resolve(file_name)
  });
}

邮递员中的数据:

{
    "customer-id": 1,
    "file-name": "Bob"
}

当我进行 API 调用时,它成功返回,但终端或邮递员中没有输出。我究竟做错了什么?似乎它正在返回未定义。

更新

控制器:

router.get('/retrieve-sound-id', retrieveSoundID);

module.exports = router;

async function retrieveSoundID(req, res, next) {
    
    fileService.retrieveSoundID(req.body).then(function(val) {
        res.send(val);
    });
}

服务:

    function retrieveSoundID({ data }) {

  return new Promise((resolve, reject) => {

    console.log(data);

 }

}

这将返回未定义

标签: javascriptnode.jspromisepostmanbackend

解决方案


您需要按照预期传递一个对象retrieveSoundID

fileService.retrieveSoundID({ customer_id, file_name }).then(function(val) {
    res.send(val);
});

而不是传递 2 个参数,您只需传递一个带有customer_idandfile_name属性的对象

更新:

您需要将数据对象传递给retrieveSoundID函数,因为它需要一个数据对象:

    fileService.retrieveSoundID({ data: req.body}).then(function(val) {
    res.send(val);
});

推荐阅读