node.js - 在路由文件之外使用 res.send()

标签 node.js express

我对 Node JS 和 Express 非常陌生,所以如果这个问题到处都是,我深表歉意。

在我的 route ,我在单独的模块中调用一个函数:

var express = require('express');
var router = express.Router();
var imgur = require('../helpers/imgur.js');

router.get('/imagesearch/:query', function(req, res) {

    imgur.search('cats', '2');

});

module.exports = router;

Imgur 帮助程序文件当前如下所示:

const https = require('https');

module.exports = {
    search : function(query, pagination) {
        var options = {
            host: 'api.imgur.com',
            path: '/3/gallery/search/hot/' + pagination + '?q=' + query,
            port: 443,
            method: 'GET',
            headers: {'Authorization' : 'Client-ID ' + process.env.API_KEY}
        };

        var callback = function(res) {
            var str = '';

            res.on('data', function(chunk) {
                str += chunk;
            });

            res.on('end', function() {
                var result = JSON.parse(str);
                result = result.data;

                var finalResult = [];

                for(var key in result) {
                    url = result[key].link;
                    title = result[key].title;
                    points = result[key].points;

                    var temp = {url: url, title: title, points: points};

                    finalResult.push(temp);
                }

                return finalResult;
            });
        };

        var req = https.request(options, callback);

        req.end();

        req.on('error', function(e) {
            console.error(e);
        });
    }
};

目的是将 FinalResult 变量转换为 JSON 并通过 res.send 提供服务,就像 API 一样。

正如您所看到的,我尝试从函数返回数据,但我认为这与 Node 的工作方式不太一致。我尝试过使用 res.send 甚至 res.render,但这两个都返回“X 不是函数”。

我知道我需要以某种方式使用回调,但此时我完全迷失了。

最佳答案

res 对象传递到您的 search 函数中,然后您可以从该函数中调用 res.send()

将其声明为参数:

search : function(res, query, pagination) {

传入:

router.get('/imagesearch/:query', function(req, res) {
    imgur.search(res, 'cats', '2');
});

然后,在 search 函数的实现中,您可以在任意位置调用 res.send(...)


或者,您可以让 search 函数返回一个 promise ,当您获得异步结果时,您将使用结果解析该 promise ,然后您的路由器可以使用该 promise 来获取结果。

关于node.js - 在路由文件之外使用 res.send(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40812399/

相关文章:

javascript - 即使 promise 成功返回,DynamoDB 也没有删除该项目?

javascript - NodeJS Express 中每个请求的全局范围

node.js - Express 中的 express.static 是什么?

javascript - 刷新页面时Socket.io多个连接

node.js - 如何缩小 node.js 应用程序? (服务器端 node.js,而不是客户端 javascript)

javascript - 使用 JavaScript 替换 txt 文件中的一行

node.js - nodeJS jake 文件 Hello World 程序不工作

node.js - Sequelize : setter for association does not update simple member for it

javascript - 使用node.js在javascript中调用另一个文件中的函数

node.js - 有没有办法在 mongodb(mongoose) 的单个查询中创建 "stored procedure"调用多查询