Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何定义一个函数,该函数将Promise返回给Express Route函数?_Javascript_Node.js_Express_Promise_Node Fetch - Fatal编程技术网

Javascript 如何定义一个函数,该函数将Promise返回给Express Route函数?

Javascript 如何定义一个函数,该函数将Promise返回给Express Route函数?,javascript,node.js,express,promise,node-fetch,Javascript,Node.js,Express,Promise,Node Fetch,我有一个名为“db_location”的业务级数据库模块,它使用节点获取模块通过RESTAPI从远程服务器获取一些数据 **db_location.js** DB LOGIC const p_conf = require('../parse_config'); const db_location = { getLocations: function() { fetch(`${p_conf.SERVER_URL}/parse` + '/classes/GCUR_LOC

我有一个名为“db_location”的业务级数据库模块,它使用
节点获取
模块通过RESTAPI从远程服务器获取一些数据

**db_location.js** DB LOGIC

const p_conf = require('../parse_config');

const db_location = {
    getLocations: function() {

        fetch(`${p_conf.SERVER_URL}/parse` + '/classes/GCUR_LOCATION', { method: 'GET', headers: {
            'X-Parse-Application-Id': 'APPLICATION_ID',
            'X-Parse-REST-API-Key': 'restAPIKey'
        }})
        .then( res1 => {
            //console.log("res1.json(): " + res1.json());
            return res1;
        })
        .catch((error) => {
            console.log(error);
            return Promise.reject(new Error(error));
        })
    }

};

module.exports = db_location
我需要在Route函数中调用此函数,以便将数据库处理与控制器分离

**locations.js** ROUTE

var path = require('path');
var express = require('express');
var fetch = require('node-fetch');
var router = express.Router();

const db_location = require('../db/db_location');

/* GET route root page. */
router.get('/', function(req, res, next) {

  db_location.getLocations()
  .then(res1 => res1.json())
  .then(json => res.send(json["results"]))
  .catch((err) => {
    console.log(err);
    return next(err);
  })
});
当我运行时,我收到以下错误

Cannot read property 'then' of undefined

TypeError: Cannot read property 'then' of undefined
从一个
响应
对象到另一个对象,承诺似乎是空的,或者承诺链中出现了错误?解决这种情况的最佳实践是什么

编辑1

如果我将getLocations更改为return res1.json()(根据
节点fetch
文档,我认为这是一个非空承诺):

路线代码更改为:

db_location.getLocations()
  .then(json => res.send(json["results"]))
  .catch((err) => {
    console.log(err);
    return next(err);
  })

抛出了完全相同的错误。

您的函数不返回任何内容


如果你想使用承诺,你需要
返回它。

你的函数不返回任何东西


如果你想使用承诺,你需要
返回它。

你需要
getLocations
返回承诺。目前,它正在运行一个
fetch
,但是
fetch
没有连接到其他任何东西,
getLocations
正在返回
undefined
(当然,您不能调用
。然后
uundefined

改为:

const db_location = {
  getLocations: function() {
    return fetch( ...

此外,由于您在<代码> GETSITION>代码> <代码> catch >代码>块中没有做任何特别的事情,您可以考虑完全省略它,并让调用方处理它。

< p>您需要<代码> GETSITION>代码>返回<代码>承诺< /代码>。目前,它正在运行一个
fetch
,但是
fetch
没有连接到其他任何东西,
getLocations
正在返回
undefined
(当然,您不能调用
。然后
uundefined

改为:

const db_location = {
  getLocations: function() {
    return fetch( ...

此外,由于您在<代码> GETSITION> /代码>代码> catch /<代码>块中没有做任何特别的事情,您可以考虑完全省略它,让调用方处理它。我还有一个问题。请参考上面的编辑1。您的

编辑1
看起来并不是
返回
初始
获取
,这正是您需要将承诺链接在一起的,如回答中所述…?它是否必须返回初始获取?有没有办法将response.json()从fetch返回到route函数?fetch调用中的response.json()是节点fetch文档中的承诺。是的,您需要从
返回
res1.json()
。然后
fetch
之后链接,除了返回
fetch
本身,这样,
getLocations
的消费者就可以看到并链接到返回的承诺链的末端
return fetch
您的意思是同时返回res1.json()和getLocations()函数的fetch吗?你能举个例子吗?非常感谢你的回答!我还有一个问题。请参考上面的编辑1。您的
编辑1
看起来并不是
返回
初始
获取
,这正是您需要将承诺链接在一起的,如回答中所述…?它是否必须返回初始获取?有没有办法将response.json()从fetch返回到route函数?fetch调用中的response.json()是节点fetch文档中的承诺。是的,您需要从
返回
res1.json()
。然后
fetch
之后链接,除了返回
fetch
本身,这样,
getLocations
的消费者就可以看到并链接到返回的承诺链的末端
return fetch
您的意思是同时返回res1.json()和getLocations()函数的fetch吗?你能举个例子吗?非常感谢!我对代码做了一些更改,它返回了一个Promise对象,但抛出了相同的错误。请参考上面的编辑。非常感谢!我对代码做了一些更改,它返回了一个Promise对象,但抛出了相同的错误。请参考上面的编辑。