Nodejs:返回异步结果的结果

2024-04-12

我正在尝试在 Node.js 中编写一个 RESTful API,它基本上围绕控制器/模型模式,并且我遇到了一些关于 Node.js 异步性质的问题:

Station.js:(控制器)

'use strict';

var url = require('url');

var Stations = require('./StationsService');

module.exports.stationsGet = function stationsGet(req, res, next){

    var result = Stations.stationsGet(req.swagger.params['arg']);

    if(typeof result !== 'undefined') {
        res.setHeader('Content-Type', 'application/json');
        res.end(JSON.stringify(result || {}, null, 2));
    }
    else
        res.end();
};

StationService.js:(模型)

'use strict';
exports.stationsGet = function(param){
    var data_output = {};

    var sql = 'SELECT * FROM foo WHERE args = ${foo}';

    db.execute(sql, {foo: param}, db.queryResult.any, function(result){
        // 'result' containing the query data
    });

    // Ideally: data_output = result;

    return data_output;
}

问题是,如果我在 db.execute 上使用回调来继续,我必须提供所有控制器上下文(res,...)来回复客户端,并且它会破坏模型/控制器架构,因为我的模型执行剩余的控制器工作。

有没有一种(简单?)方法来获取 stationGet() 中的查询结果然后返回它? 这真的违反了nodejs的本质吗?如果是的话,在这种情况下如何采取正确的行为?

PS:我使用的是 swagger,它为 Node.js 生成了文件和基本结构。


在这种情况下你应该使用回调(也看看promise)

你的控制器将如下所示:

'use strict';

var url = require('url');

var Stations = require('./StationsService');

module.exports.stationsGet = function stationsGet(req, res, next){

    Stations.stationsGet(req.swagger.params['arg'], function(err, result) {
        if(typeof result !== 'undefined') {
            res.setHeader('Content-Type', 'application/json');
            res.end(JSON.stringify(result || {}, null, 2));
        }
        else
            res.end();
    });
};

您创建的模型必须接受回调作为最后一个参数,然后返回errresult如下:

'use strict';
exports.stationsGet = function(param, cb){
    var data_output = {};

    var sql = 'SELECT * FROM foo WHERE args = ${foo}';

    db.execute(sql, {foo: param}, db.queryResult.any, function(result){
       cb(null, result); // first parameter is the error and the second is the result, this is pretty standard in node
    });
}

我希望这可以帮助你

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Nodejs:返回异步结果的结果 的相关文章

  • 为 Node.js 客户端应用程序保留 Firebase 用户

    我正在使用 Firebase 构建 Node js 命令行界面 CLI 用于与后端进行身份验证 我想避免让用户每次运行命令时都输入密码 相反 我想实现一个 登录 流程 将凭证保留到文件系统 该凭证可用于后续的无密码身份验证 直到用户 注销
  • 了解 SSMS 2008 中关系的更新和删除规则

    当我们定义外键约束时 我对 SQL Server 2008 Management Studio 中的更新和删除规则的含义感到困惑 我也没有找到相关的帮助文档 例如F1帮助 这是屏幕快照 如果有人能描述它们的含义并推荐一些相关文档来阅读 我将
  • Node.js 中的异步或步骤

    我无法让我的异步代码与 node js 一起使用 尝试异步和步骤库 代码仅返回第一个函数 似乎没有执行其余函数 我究竟做错了什么 thanks var step require step step function f1 console l
  • 使用 Jade 评估自定义 javascript 方法 (CircularJSON)

    我想通过 Jade 将一个对象解析为客户端 JavaScript 通常这会起作用 script var object JSON parse JSON stringify object but my object is circular ht
  • 在 SQL 数据库中存储“列表”的最正确方法是什么?

    因此 我读了很多关于如何将多个值存储到一个列中是一个坏主意 并且违反了数据标准化的第一条规则 令人惊讶的是 这不是 不要谈论数据标准化 所以我需要一些帮助 目前我正在为我工 作的地方设计一个 ASP NET 网页 我想根据此人所属的 Act
  • Laravel leftJoin 仅右表的最后一条记录

    我是 Laravel 的新手 我有两张桌子 1 产品 2 价格 products id product int p key name varchar prices id price int p key id product int
  • 当所有维度值都具有 100% 重要性时处理多对多维度

    我至少会尽力保持简洁 假设我们正在跟踪一段时间内的账户余额 所以我们的事实表将包含诸如 账户余额情况表 FK 账户ID FK 日期ID Balance 显然你有一个账户维度表 and a 日期维度表 所以现在我们可以轻松地过滤帐户或日期 或
  • 对多个数据库执行 SQL 查询

    我知道我的帖子与该论坛中的其他帖子的标题非常相似 但我真的找不到我需要的答案 这是我的问题 我的 Windows Server 上运行着 SQL Server 在我的 SQL Server 中 我有大约 30 个数据库 它们都具有相同的表和
  • 将第三个表链接到多对多关联中的桥接表

    设计这个数据库的正确方法是什么 这是我设置表格的方式 我在名为 教师 的表和名为 仪器 的表之间存在多对多关系 然后我有一个连接两者的桥接表 我想将另一个表与 BRIDGE 表关联起来 意思是乐器 老师的组合 该表有 3 行 指定老师可以教
  • MySQL 查询到 CSV [重复]

    这个问题在这里已经有答案了 有没有一种简单的方法来运行MySQL查询来自linux命令行并以csv格式输出结果 这就是我现在正在做的事情 mysql u uid ppwd D dbname lt lt EOQ sed e s g tee l
  • SELECT 语句会受到 SQL 注入攻击吗?

    实际上有2个问题 我知道我必须尽可能多地使用存储过程 但我想知道以下内容 A 我可以从 SELECT 语句 例如 Select from MyTable 获得 SQL 注入攻击吗 B 另外 当我在 ASP NET 中使用 SQLDataSo
  • Node Sass 没有绑定您当前的环境

    我在 SO 上看到过很多这样的问题 但似乎没有一个能解决或匹配问题 Node Sass 找不到适合您当前环境的绑定 带有 Node js 6 x 的 Windows 64 位 奇怪的是 我没有安装 Node js 6 x 从命令行 node
  • 为什么我可以像调用实例方法一样调用类方法?

    我正在查看这个例子 class SQLObject def self columns return columns if columns columns DBConnection execute2 lt lt SQL first SELEC
  • 如何在 Play java 中创建数据库线程池并使用该池进行数据库查询

    我目前正在使用 play java 并使用默认线程池进行数据库查询 但了解使用数据库线程池进行数据库查询可以使我的系统更加高效 目前我的代码是 import play libs Akka import scala concurrent Ex
  • Java JDBC:更改表

    我希望对此表进行以下修改 添加 状态列 varchar 20 日期列 时间戳 我不确定该怎么做 String createTable Create table aircraft aircraftNumber int airLineCompa
  • 未捕获 Func<> 的异常(异步)

    我有以下代码 为了进行此重现而进行了简化 显然 catch 异常块将包含更多逻辑 我有以下代码 void Main var result ExecuteAction async gt Will contain real async code
  • 如何将内联 JavaScript 与 Express/Node.js 中动态生成的内容分开?

    对于具有几年 Web 开发经验但没有找到答案的人来说 这是一个有点菜鸟的问题程序员堆栈交换 or Google 我决定在这里问一下 我在用Express网络框架Node js 但这个问题并不特定于任何 Web 框架或编程语言 以下是从数据库
  • 在打字稿中导入 json

    我是 typescript 的新手 在我的项目中 我们使用 typescript2 在我的要求之一中 我需要导入 json 文件 所以我创建了 d ts 文件如下 test d ts declare module json const va
  • 使用间隔阈值对不同的连续时间戳记录进行分组

    我有一系列间歇性间隔的带有时间戳的 GPS 坐标 我正在使用 PostGIS 将它们渲染到地图画布上 为了渲染它们 需要使用 PostGIS 中的 ST MakeLine 聚合函数将点聚合成线 从而在地图上留下 GPS 数据丢失的间隙 数据
  • 索引数量越少意味着插入、更新和删除速度更快? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi

随机推荐

  • 重定向 PHP [重复]

    这个问题在这里已经有答案了 如何从 PHP 页面重定向到另一个页面 div div a href login html class ui btn left Back a div div
  • 根据旋转角度计算XY运动?

    假设我在 2D 空间中有一个可以旋转的对象 然后应该根据其旋转角度移动 例如 如果角度为0 指向上方 则on timer它应该将 1 移动 Y 将 0 移动 X 如果角度为 45 那么它应该按 Y 移动 1 按 X 移动 1 如果指向 90
  • 使用 Postgresql 让 Sqlalchemy 在过滤器中使用日期

    我正在尝试在 Sqlalchemy 中执行以下查询 Select from Mytable where Date date time field 2011 08 16 我尝试了几种方法 有些在这里 但没有一个看起来 现实 因为有些确实强制转
  • Python urllib2:即使在 HTTPError 异常期间也读取内容主体?

    我正在使用 urllib2 通过 HTTP 获取页面 有时 当我的请求包含错误时 资源会抛出 HTTP 错误 400 错误请求 但是 该响应还包含一个提供详细错误消息的 XML 元素 能够看到该错误而不仅仅是 urllib2 返回的 HTT
  • getResourceAsStream(file) 在哪里搜索文件?

    我很困惑getResourceAsStream 我的包结构如下 src net floodlightcontroller invoked getResourceAsStream here resources floodlightdefaul
  • 查找mysql死锁原因

    1 我有一个脚本 执行一些更新 删除操作 2 所有sql操作都在事务内执行 InnoDb表 3 有时我会收到 尝试获取锁定时发现死锁 尝试重新启动事务 该应用程序中还有一些其他作业执行数据库操作 我的问题是找出其他脚本中的哪些并发查询会干扰
  • 如何使用 Apache SOLR 和 PHP 代码突出显示搜索结果

    我使用 SOLR 和 Tomcat servlet 容器开发了搜索页面 使用 PHP 代码 我将搜索查询发布到 solrQuery 函数中 并在此函数中定义了查询参数 如下所示 query q trim urlencode q versio
  • CUDA:如何在设备上填充动态大小的向量并将其内容返回到另一个设备函数?

    我想知道哪种技术可以填充设备上的动态大小数组 int row 在下面的代码中 然后返回其内容 以供另一个设备函数使用 为了将问题置于上下文中 下面的代码尝试使用在 GPU 上运行的高斯 勒让德求积来跨越勒让德多项式基组中的任意函数 incl
  • 如何从 vbs 脚本发送电子邮件

    如何从 vbs 脚本发送电子邮件 在无法连接到互联网的计算机上 位于我的非互联网区域 我通过谷歌搜索将以下内容整合在一起 但似乎需要调用微软的服务器 如果我无法访问 microsoft com 该怎么办 sch http schemas m
  • 如何在发送PHP邮件时隐藏服务器信息?

    我有这样的事情 to subject msg from From me lt email protected cdn cgi l email protection gt mail to subject msg from 当我发送电子邮件时
  • 函数模板显式特化声明中尾随模板参数的推导(无函数参数推导)

    这个问题是评论中讨论的分支变量模板的模板特化和类型推导 https stackoverflow com questions 61384251 template specialization of variable template and
  • 找到实际的 RTMP 流 URL?

    让我举个例子 这是视频嵌入代码 div Loading the player div
  • Swift 4:Firebase 时间戳

    我应该如何将 Firebase 时间戳与本地设备时间进行比较 let serverTIme FIRServerValue timestamp let localtime Date let dbRef FirebaseServerRefere
  • TypeScript 中的 WebView 扩展

    在代码示例 catcoding 中 支持 webview 逻辑被编写为 JavaScript 中的匿名函数 但我想在 Typescript 中构建此支持逻辑 我厌倦了用 requireJS 将这个逻辑重现为打字稿包 但我无法让它工作 Thi
  • 在 C# 中使用 CreateRemoteThread 传递多个参数

    我的目标是使用 C 中的 P Invoke CreateRemoteThread 调用远程进程中的函数 问题是该函数需要多个参数 有没有办法将多个参数传递给函数 DllImport kernel32 dll SetLastError tru
  • 编译时常量 id

    鉴于以下情况 template
  • 如何限制“v-for”中元素的迭代

    我正在构建一个小型应用程序Vuejs 2 0我有大约 15 个迭代元素 我想限制v for仅 5 个元素 并且可以有更多按钮来显示整个列表 有没有可能 你可以试试这个代码 div div div div div div div div
  • sort 如何计算出有多少 RAM?

    If I do ulimit v 200000 和跑步 sort largefile 我可以看到从top该类型最多使用 142232 Virt 和 92764 Res 但一段时间后会减少更多 sort 如何知道 ulimit 限制设置为多少
  • 将位图加载到 PictureBox 控件

    由于某种原因 这不起作用 我不知道为什么 objBitmap new Bitmap Resource1 im Stream stream objBitmap Save stream ImageFormat Bmp this pictureB
  • Nodejs:返回异步结果的结果

    我正在尝试在 Node js 中编写一个 RESTful API 它基本上围绕控制器 模型模式 并且我遇到了一些关于 Node js 异步性质的问题 Station js 控制器 use strict var url require url