Articles of expression

res.json()和res.end()之间的性能差异

我想用Node和Express发送一个JSON响应。 我试图比较res.end和res.json的性能。 版本1:res.json res.json(anObject); 版本2:res.end res.setHeader('Content-Type', 'application/json'); res.end(JSON.stringify(anObject)); 运行一些基准,我可以看到第二个版本比第一个版本快了近15%。 如果我想发送一个JSON响应,是否有一个特殊的原因,我必须使用res.json ?

我怎样才能在express.js玉器模板中进行降价?

我使用快速js框架。 我有一个从数据库markdownifiedstring,并希望在我的玉模板呈现为HTML。 我安装了node-markdown,想要这样渲染它: app.js var md = require("node-markdown").Markdown; template.jade – each note in todo.notes div= md(note.string) 但是,它不会打印出任何东西…有什么build议吗? 谢谢! 编辑:解决它自己,只是忘了把我的看法的MDvariables…

在node.js(快速框架)中build立访问日志

我想知道是否node.js (或expression框架)有任何内置的访问日志logging像grails例如? 我有grails应用程序运行在tomcat上,它会自动生成/apache-tomcat-7.0.42/logs/localhost_access_log.2013.10.30.txt文件,其中有关于请求响应的日志如下所示: [30/Oct/2013:00:00:01 +0000] [my-ip-address] [http-bio-8080-exec-18] "GET /my-service/check HTTP/1.0" [200] [took: 1 milis] 这个日志是由系统自动编写的,我不必担心这个。 那么node.js呢? 谢谢你的帮助! 伊万

如果没有req.session.save(),会话将不会保存在Node.js中

我正在使用Node.js,Express和Redis构build一个网站进行会话pipe理。 无论什么原因,如果我有一个会话variables(在这个例子中是isLoggedIn ),并刷新页面,variables不会被保存,但是,如果我设置variables后调用req.session.save() ,它会得到保存到Redis(redis-cli监视器显示 – 不调用save()表明该variables不存在,而调用save()显示它)。 我正在使用它来设置和启动服务器: var express = require('express'); var path = require('path'); var favicon = require('serve-favicon'); var logger = require('morgan'); var cookieParser = require('cookie-parser'); var bodyParser = require('body-parser'); var swig = require('swig'); var session = require('express-session') var RedisStore = require('connect-redis')(session); var routes = require('./routes/index'); var users = require('./routes/users'); var app = express(); […]

如何在NodeJs中使用asynchronous数据源创build可读stream?

环境: NodeJS,Express,DynamoDB(但真的可以是任何数据库) 场景:需要读取大量logging并作为可下载文件返回给用户。 这意味着我无法一次缓冲所有的内容,然后将其发送到Express的响应中。 此外,我可能需要多次执行查询,因为所有数据可能不会在一个查询中返回。 build议的解决scheme:使用一个可读的stream,可以传送到Express中的响应stream。 我开始创build一个从streaminheritance的对象.Readable并实现了一个推送查询结果的_read()方法。 问题是在_read()中调用的数据库查询是asynchronous的,但是stream.read()是同步方法。 当stream被传送到服务器的响应时,在db查询甚至有机会执行之前,调用多次该读取。 所以查询被调用多次,甚至当查询的第一个实例完成并执行推(空),其他查询完成,我得到一个“EOF后”(错误)。 有没有办法正确使用_read()? 我应该忘记_read(),只是在构造函数中执行查询和push()结果? 我应该执行查询并发出数据事件而不是push()? 谢谢 function DynamoDbResultStream(query, options){ if(!(this instanceof DynamoDbResultStream)){ return new DynamoDbResultStream(query, options); } Readable.call(this, options); this.dbQuery = query; this.done = false; } util.inherits(DynamoDbResultStream, Readable); DynamoDbResultStream.prototype._read = function(){ var self = this; if(!this.done){ dynamoDB.query(this.dbQuery, function(err, data) { if (!err) { try{ for(i=0;i<data.Items.length;i++){ self.push(data.Items[i]); } […]

我缺less关于快速会话和cookie的信息?

express和express-session和express-sql-session已经相当的了。 我已经得到它在用户login时在会话的数据库中创build一行。这是我如何设置它: //login route handler this.bcrypt.compare(password, row.hashed, function(err, passwordsMatch) { if (passwordsMatch === true) { console.log("user now logged in"); req.session.user = row; req.session.success = 'User successfully logged in'; res.send(row); res.end(); } }); Hunky dory! 我可以跳进我的会话表,并从数据库中获取行。 这里是: {"cookie":{"originalMaxAge":600000,"expires":"2015-08-24T23:16:20.079Z","httpOnly":false,"path":"/"}, "user":{"userID":24,"userName":"g","email":"g","joinDate":"2015-08-24T07:15:33.000Z"},"success":"User successfully logged in"} 请注意,您可以看到自定义使用对象已设置。 但是,在下一个获取某些数据的请求中,我检查会话上的user对象: // some other route called after login. if (!req.session.user) { console.log('user not […]

在Express.js中POST数据JSONvalidation

我正在使用Node.js和Express.js编写一个应用程序。 该应用程序有一个(小)REST API,然后是一个Web前端。 我使用MongoDb。 对于API,我倾向于POST数据到某个端点,然后进行处理或者其他操作,并将其转储到数据库中。 但是,我有一些数据库架构,我想强制执行。 什么是我的选项/最佳做法,强制执行我的POST数据的特定结构,所以我知道某些领域是目前和特定types。 如果这可以在中间件级别完成,那将是很好的,但这不是必需的。 人们通常为validation/模式执行做什么?

如何识别下面的代码模式

我有一个js承诺的模式,我想确定几个关键字 例如,如果我把这样的代码: var deferred = Q.defer(); 而在文件中,我也有以下各自的价值 deferred.reject(err); deferred.resolve(); return deferred.promise; 完整的代码 例1 function writeError(errMessage) { var deferred = Q.defer(); fs.writeFile("errors.log", errMessage, function (err) { if (err) { deferred.reject(err); } else { deferred.resolve(); } }); return deferred.promise; } 我想如果我把大的代码文件(作为string) ,发现这个文件包含模式 另一个例子 var d = Q.defer(); / *或$ q.defer * / 而在文件中,你也有以下各自的价值 d.resolve(val); d.reject(err); return d.promise; […]

JavaScript正则expression式迭代器来提取组

假设我们有以下文字:“1 a,2 b,3 c,4 d”和下面的expression式:/ \ d(\ w)/ g 我们要做的就是提取正则expression式所表示的a,b,c,d。 不幸的是,“1 a,2 b,3 c,4 d”.match(/ \ d(\ w)/ g)将会产生一个数组:1 a,2 b,3 c,4 d和RegExp。来自上一场比赛的组,即RegExp。$ 1 =='d'。 我怎么能遍历这个正则expression式,以便我可以提取组以及…我正在寻找一个解决scheme,也是有效的内存,即某种迭代器对象 编辑:它需要是通用的。 我只是在这里提供一个简单的例子。 一个解决scheme是循环数组,并重新申请每个项目的正则expression式没有全局标志,但我觉得这个解决scheme有点愚蠢,虽然它似乎是唯一的方法来做到这一点。

如何使用Express处理Node.js中的错误

我正在与一个项目的合作伙伴合作。 他在Node.js + Express中写了很多代码,但是我们遇到了这个架构的问题。 为了弥补这一点,我的主要任务是找出构buildNode.js + Express应用程序的最佳方法。 我碰到两种情况,处理错误,我想要一些build议。 首先,我如何捕获顶级exception? 我想要的最后一件事是一个bug完全杀死节点进程。 面对任何错误,我想继续为用户服务。 其次,一些错误通过callback传递(我们使用caolan / async )。 作为每个路由处理程序的一部分,我们要呈现一个视图(GET),redirect到另一个path(POST),并且我们要用一个自定义错误消息redirect到一个错误屏幕。 我怎样才能确保在一个地方捕捉这个逻辑?