小编Jak*_*ake的帖子

如何在node.js + express中捕获"响应结束"事件?

我想编写一个快速中间件函数,在响应的'end'事件(如果存在)上设置一个监听器.目的是根据结束处理程序决定发送的http响应代码进行清理,例如记录响应代码和db事务的回滚/提交.即,我希望这个清理对结束调用者是透明的.

我想在快递中做以下的事情:

路由中间件

function (req, res, next) {
   res.on ('end', function () {
      // log the response code and handle db
      if (res.statusCode < 400) { db.commit() } else { db.rollback() }
   });
   next();
}
Run Code Online (Sandbox Code Playgroud)

路线:

app.post ("/something", function (req, res) { 
    db.doSomething (function () {
       if (some problem) {
          res.send (500);
       } else {
          res.send (200);
       }
    });
 }
Run Code Online (Sandbox Code Playgroud)

当我尝试这个时,'end'事件处理程序永远不会被调用.同样的res.on('close'),我在另一篇文章中读到过.这样的事件会被解雇吗?

我能想到的另一种方法是在自定义中间件中包装res.endres.send使用我自己的版本.这不是理想的,因为res.end并且res.send不接受回调,所以我不能只是包装它们,调用原始然后根据他们回电话时设置的响应代码做我的事情(因为他们不会打电话我回来了).

有一个简单的方法吗?

events response node.js express

34
推荐指数
3
解决办法
2万
查看次数

如何使用node.js请求模块使用我自己的证书进行SSL调用?

我正在使用node.js和此请求模块对另一台服务器进行HTTP调用.

https://github.com/mikeal/request

它很棒.我现在需要使用我公司的SSL证书修改此代码以通过SSL进行调用.在请求模块的文档中,它说明了strictSSL选项:

"strictSSL - 设置为true以要求SSL证书有效.注意:要使用您自己的证书颁发机构,您需要指定使用该ca作为选项创建的代理."

这听起来像我需要做的,但我不明白这句话:"指定一个用该ca作为选项创建的代理."

1)"代理人"是什么意思?2)如何"指定代理"3)如何创建代理"以该ca作为选项"?

代码示例会很棒,但任何潜在客户都会有所帮助.谢谢.

ssl https certificate request node.js

19
推荐指数
2
解决办法
4万
查看次数

表达未被调用的全局中间件

据我所知,我正在配置我的全局中间件功能,如文档和关于该主题的每个论坛帖子中所述,但它没有被调用.有谁看到我做错了什么?表达3.2.5.在日志输出中,我看到以下内容:

Express server listening on port 9000
inside route
GET / 200 7ms - 2b
Run Code Online (Sandbox Code Playgroud)

我希望看到"内部中间件",然后"内部路由".相反,我只看到"内部路线".

代码:

var express = require('express'), http=require('http'), path=require('path');

var app = express();

app.enable('trust proxy');

app.set('port', process.env.PORT || 9000);
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
app.set('layout', 'layout');

app.use(require('express-ejs-layouts'));
app.use(express.favicon(__dirname + '/public/images/favicon.ico')); 
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride())
app.use(express.cookieParser('kfiwknks'));
app.use(express.session());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));

if ('development' == app.get('env')) {
  app.use(express.errorHandler());
} else {
  app.use(function(err, req, res, next){
    console.error (error);
    res.send (500, "Internal server error");
  });
}

app.use (function (req, res, …
Run Code Online (Sandbox Code Playgroud)

middleware node.js express

17
推荐指数
2
解决办法
1万
查看次数

玉模板引擎(在node.js下):没有管道符号的多行块

我目前正在一个新项目上使用Jade.它似乎非常适合编写webapp布局,但不适合编写静态内容,例如网页

包含文字的元素.

例如,要创建这样的段落,我相信我需要这样做:

p
  | This is my long,
  | multi-line
  | paragraph.
Run Code Online (Sandbox Code Playgroud)

对于充满真实段落文本的静态网页,由于每行开头的管道符号,使用玉石成为负担.

是否存在某种语法糖用于将整个块标记为文本节点,因为管道符号逐行进行?或者我不知道的现有过滤器?

我正在探索的一个解决方案是创建一个:块过滤器或其他东西,它在每行前面加上| 然后将它传递给Jade,但是jade关于创建过滤器的文档至少可以说是稀疏的,所以可能需要一段时间来弄明白.如果有人能就这样的解决方案提供指导,我会很感激.

block node.js pug

16
推荐指数
2
解决办法
2万
查看次数

为什么SQL id序列不同步(特别是使用Postgres)?

我已经看到了当它与它生成的主键不同步时更新序列的解决方案,但我不明白这个问题是如何发生的.

有没有人能够深入了解主键字段(默认定义为序列的下一个字段,其主键未在任何地方显式设置)如何与序列不同步?我正在使用Postgres,我们看到这种情况时不时发生.当序列为现有行生成id时,它最终会产生重复键约束.

sql postgresql sequence

9
推荐指数
1
解决办法
1767
查看次数

node-postgres:设置最大连接池大小

在设置最大连接池大小时,我找不到node-postgres驱动器的任何文档,或者如果它不可配置,甚至找不到它的内容.有谁知道如何设置最大连接数,或默认情况下它是什么?

postgresql connection-pooling node.js

9
推荐指数
2
解决办法
7783
查看次数

使用node.js运行许多并行的http请求

我的任务是将一个进程分成许多并行运行的小进程,分发给许多从机.请求通过HTTP传入,服务器将其分解为发送到从属计算机的多个子进程,等待所有从属请求返回响应,然后将聚合结果整理为单个数据对象,作为结果返回顶级请求.我认为node.js会很有用,但由于它是单线程的,我无法确定这是否可能,或者它是否会阻止等待每个请求返回之后再转到下一个请求.这可能与node.js一起使用吗?如果是这样,有人会指出我正确的方向吗?即一个节点模块使用或概述它将如何完成?

谢谢你的帮助.

parallel-processing asynchronous http node.js

8
推荐指数
2
解决办法
4345
查看次数

如何在管理 .opam 文件的沙丘项目中添加库依赖项,而不会出现中间构建错误?

.opam当您运行时, dune 将生成并更新项目的文件dune build,让您只需管理dune-project.

然而,在添加新的依赖项时,这似乎需要一个尴尬的步骤。我能弄清楚的唯一事件顺序似乎是:

  1. 将新的依赖项添加到 的dune-project节中depends
  2. dune build.opam使用新的依赖项更新文件,并失败并显示缺少新依赖项的错误。
  3. opam install . --deps-only
  4. dune build: 成功了。

这是预期的流程吗?因错误而失败的步骤dune build,以获得更新 . opam文件,似乎不正确。

作为构建步骤的一部分,是否有一个 dune 子命令仅使用 dune-project 中的依赖项更新 opam 文件,或者是否有一个 dune 子命令将更新 opam 文件并根据更新的 opam 文件更新已安装的依赖项?

或者上述事件顺序是预期的流程吗?

ocaml opam dune

8
推荐指数
1
解决办法
1024
查看次数

如何安装与.net 4.0兼容的json.net版本?

为了避免此处描述的问题:

无法从程序集'mscorlib加载类型'System.Runtime.CompilerServices.ExtensionAttribute'

我正在尝试构建我的项目以.net 4.0而不是4.5(在Visual Studio 2013中),但我收到以下错误:

  • 找不到类型或命名空间名称'Newtonsoft'(您是否缺少using指令或程序集引用?)

    无法解析主要参考"Newtonsoft.Json",因为它是针对".NETFramework,Version = v4.5"框架构建的.这是比当前目标框架".NETFramework,Version = v4.0"更高的版本.

所以我想安装一个与.net 4.0兼容的json.net版本.我看到下载的NuGet包除了lib/4.5之外还包含一个lib/4.0目录,但是我无法弄清楚如何让包管理器使用它来代替4.5版本.

如何使用与.net 4.0兼容的json.net版本而不是仅适用于.net 4.5的版本来获取我的项目解决方案?

.net json.net nuget

7
推荐指数
1
解决办法
1万
查看次数

express + jade:提供的局部变量在视图中是未定义的(node.js + express + jade)

我正在使用node.js实现一个webapp并使用jade模板引擎表达.

模板呈现正常,可以访问助手和动态助手,但不能访问"body"局部变量以外的局部变量,该变量由express提供,并且在layout.jade中可用并定义.

这是一些代码:

app.set ('view engine', 'jade');

app.get ("/test", function (req, res) {  
    res.render ('test', {
        locals: { name: "jake" }
    });
});
Run Code Online (Sandbox Code Playgroud)

这是test.jade:

p hello
=name
Run Code Online (Sandbox Code Playgroud)

当我删除第二行(引用名称)时,模板正确呈现,在网页中显示"hello"一词.当我包含= name时,它会抛出一个ReferenceError:

500 ReferenceError: Jade:2 NaN. 'p hello' NaN. '=name' name is not defined
NaN. 'p hello'
NaN. '=name'
Run Code Online (Sandbox Code Playgroud)

我相信我正在关注玉,并完全根据局部变量表达例子.我做错了什么,或者这可能是快递或玉器中的错误?

node.js express pug

6
推荐指数
1
解决办法
1万
查看次数

没有茉莉花节点错误的堆栈跟踪

我正在使用node.js和jasmine-node npm模块来运行测试.除非代码产生错误,否则这很有效.我没有堆栈跟踪.例如,我的一个测试只输出:

Error: TypeError: Cannot read property 'length' of undefined

没有堆栈跟踪.这使得查找这些错误非常耗时,以至于我正在寻找jasmine-node的替代方案.

如何让jasmine-node输出错误的完整堆栈跟踪?--verbose命令行标志不会这样做.

stack-trace node.js jasmine

6
推荐指数
2
解决办法
3000
查看次数

node.js + postgres数据库事务管理

我们有一个现有的SQL数据库,我正在编写一个使用直接SQL访问它的node.js服务器,使用这个postgres驱动程序模块:

https://github.com/brianc/node-postgres

到目前为止,我找不到与postgres一起使用的事务管理节点模块.有谁知道吗?最好有一些现实世界的使用?

其次,在更高层次上,我们正在评估node.js是否可以实际取代Java作为可能处理卷的服务器的真实解决方案.交易管理是我们必须解决的问题之一.因此,对此的一些见解也将是有用的.

目前,我只是在节点服务器请求开始时发出一个sql BEGIN,在结尾处发出一个ROLLBACK或COMMIT.但是,我(可能显然)不熟悉围绕SQL事务管理的现实问题.如果有人可以简要解释交易管理框架解决的问题,我会发现它很有用.

编辑:我正在使用postgres驱动程序的内置连接池机制,http请求中的所有查询都是在从池中获取的同一连接上发出的.首先发出BEGIN,然后是特定的http请求,然后是COMMIT或ROLLBACK.

谢谢.

sql database postgresql transactions node.js

5
推荐指数
1
解决办法
5659
查看次数

如何向node.js/express'发送或获取其原始输出流提供输入流?

我在我的快递应用程序中提供了一个路由,它提供了云文件的内容作为下载.我可以访问云文件的输入流,我想将其直接传递到响应的输出流中.但是,我正在使用express,它似乎不支持输入流.

我希望我能做到这一点:

res.send (cloudInputStream);
Run Code Online (Sandbox Code Playgroud)

但这不起作用.Express'发送一个正文或一个缓冲区,但显然不是输入流.

既然如此,我想要做的是使用res.setHeader()设置标头,然后访问原始输出流,然后:

cloudInputStream.pipe (responseOutputStream);

这可能吗?

或者,我可以将输入流读入缓冲区,并提供要发送的缓冲区.但是,这会将整个云文件的内容一次性读入内存,我想避免这种情况.

有什么想法吗?

stream node.js express

4
推荐指数
1
解决办法
3563
查看次数