Tag: 表示

Express + node.js:服务非常缓慢的大目录打包为tar

我刚刚开始使用web开发,而node.js + express帮助我在不那么强大的embedded式系统上快速获得简单的服务器。 当试图将270MB目录作为一个tar文件服务器时,性能对我的解决scheme并不是很好。 在得到irc的一些帮助之后,我尝试使用fstream和node-tar来提供文件,如下所示: fstream.Reader({ type: "Directory" , path: mydir }).pipe(tar.Pack({})).on("error", function(){ res.statusCode = 500; res.end('Unable to create tarball'); }).pipe(res) 它的工作原理,但需要大约20分钟,将270MB文件下载到我的电脑。 作为一个实验,我试图tar目标文件夹,然后scp'ed到我的电脑。 这花了1m12s + 2m17s,这是相当大的差异。 (我尝试使用节点静态服务预tar'ed文件,但在embedded式系统上运行内存不足) 任何想法可以使express + node.js解决scheme如此缓慢? 更新一些基准: 我怀疑,使用其他networking服务器将更好的静态文件服务,但我不认为这可以解释这里的重大差异。 在导致64MB tar的文件夹上进行基准testing 手册 : 46秒 # on server: tar -cf foo.rar <folder> # on client scp root@<ip>/path/to/foo.rar . fstream + node-tar:直接 4分25秒 fstream.Reader({type: […]

Express.js模板引擎,可以呈现JSON和未转义的string

我正在寻找符合特定标准的模板引擎: 它可以直接渲染JSON。 例如: 这个: template.render("This is a json object: {{jsonObject}}", {jsonObject : {property: "string"}}) 会输出这个: “这是一个json对象:{jsonObject:{property:”string“}}” 而不是这个: “这是一个json对象:[Object object]” 不过,我仍然可以这样做: template.render("This is a property: {{jsonObject.property}}", {jsonObject : {property: "string"}}) 得到这个: “这是一个属性:string” 它与express.js一起工作 它使用正常的HTML。 没有什么像haml /玉。 它可以提供未转义的值,越less的样板越好。 原因是:我正在创build一个项目,我希望有人能够创build一个html文档,在其脚本标记中使用传入的JSON对象。 有更简单的方法来实现这个目标,我意识到,例如对象可以被串化,但我认为能够使用模板引擎来操作该对象也会有一些好处。

如何获得不更新会话的Express / Connect路由

我正在构build一个单页JavaScript应用程序,在后端与Express交谈。 在应用程序的不同点,我们与后端进行交互,更新会话。 由于安全原因,会话过期相对较短。 其中,我想提醒用户,如果会话已经闲置了很长时间,并且没有与后端进行交易,会话可能会过期。 我想有一个快速“心跳”路线,返回会话剩余多久(session.maxAge),但我不希望它刷新会话到期。 connect.session代码在请求结束时自动刷新会话。 我正在寻找一种方法来访问会话来获取maxAge,但没有更新。

如何使用Underscore.js作为View Engine for Express v3

在这里回答v2有一个问题,但v3 ExpressJS api是完全不同的,并使用完全不同的布局系统。 有没有人有任何使用Underscore.js(如果需要与Consolidate.js)作为一个快速v3应用程序的主视图引擎的能力,使用主布局的经验吗? 我已经把它作为主视图引擎,但没有布局的工作(它只是打印出单个HTML文件)

如何自定义express.js url查询参数parsing

所以, req.query返回查询参数的散列。 更妙的是,如果一个参数实际上是一个json对象,那么它将它parsing到各自的json中,这真是太棒了。 但是,我怎样才能定制这个parsing? 例如,我想要一个特定的值被parsing为一个数字,而不是一个string。 当然,我可以做到事后和修改返回的对象。 但是,我很有兴趣知道该过程是否可以定制。 编辑 例如,请考虑以下请求: GET http://localhost:8000/admin/api/inventory?rowsPerPage=25&page=0&q%5Bqty%5D%5B%24lt%5D=100 解码它我们得到: GET http://localhost:8000/admin/api/inventory?rowsPerPage=25&page=0&q[qty][$lt]=100 现在,将这些查询参数转换为 req.query = {rowsPerPage: "25", page: "0", q: {qty: {$lt: "100"}} 我的问题是“25”,“0”和“100” – 我希望它们是数字。 所以,我可以改变req.query post req.query或干扰parsing过程。 我想学习后者。

避免在Node.js服务器上重复内容

我有小型图像托pipe,我意识到有很多重复的内容。 我想在将来通过使用校验和或者散列代码来消除这个问题,新加载的文件将被散列,与现有的图像散列数据库相比,如果它已经存在,用户将被显示现有的图像链接。 所有在一个例子 我的设置是准系统Node.js + jQueryfile upload +2目录(一个用于论坛上传,另一个用于直接网页上传)。 什么是最好的(快速和可靠的)散列和数据库设置为了做到这一点考虑到可能在每个目录中有数千或百万个文件? 我认为MD5或SHA1是矫枉过正,可能需要大量的资源。 我想知道是否有更简单的解决scheme。 统计: 〜每天上传1000张图片 〜400 kb平均图像大小 在服务器中〜35,000图像 〜30%的重复内容(使用MD5进行testing)

mongoose分页

我正在尝试为MongoDB和Mongoose的REST服务做一个简单的分页。 以下是我现在正在做的事情。 正如你所看到的,我正在'下一个'variables发送0,但是我只想在没有更多结果时发送0。 结果结束后怎么能得到? var user = User.find( {}, {}, {skip: skip, limit: limit}, function(err, docs) { if (!err) { res.json({users: docs, next: 0} ); } else { throw err; } }); 谢谢! PS:我使用node.js和expression。

NodeJS:使用connect-flash的Express 3.0(根据护照本地策略中的build议),仍然发现req.flash的exception

我是NodeJS的新手,并试图通过Express3.0构build一个应用程序,包括护照本地策略的authentication目的。 但是下面的例外(关于req.flash)阻碍了我的进步。 以下行中发生exception。 res.render('login',{user:req.user,message:req.flash('error')}); performance 500 TypeError:对象#没有方法“闪光灯” 在/Users/vivekanandan/Source/Git/ExpressApp/CosmicEnergyCoupled/app.js:115:54 在callback(/Users/vivekanandan/Source/Git/ExpressApp/CosmicEnergyCoupled/node_modules/express/lib/router/index.js:162:37) at param(/Users/vivekanandan/Source/Git/ExpressApp/CosmicEnergyCoupled/node_modules/express/lib/router/index.js:136:11) (/Users/vivekanandan/Source/Git/ExpressApp/CosmicEnergyCoupled/node_modules/express/lib/router/index.js:143:5) 在Router._dispatch(/Users/vivekanandan/Source/Git/ExpressApp/CosmicEnergyCoupled/node_modules/express/lib/router/index.js:171:5) 在Object.router(/Users/vivekanandan/Source/Git/ExpressApp/CosmicEnergyCoupled/node_modules/express/lib/router/index.js:33:10) (/Users/vivekanandan/Source/Git/ExpressApp/CosmicEnergyCoupled/node_modules/express/node_modules/connect/lib/proto.js:190:15) 在store.get.next(/Users/vivekanandan/Source/Git/ExpressApp/CosmicEnergyCoupled/node_modules/express/node_modules/connect/lib/middleware/session.js:310:9) 在/Users/vivekanandan/Source/Git/ExpressApp/CosmicEnergyCoupled/node_modules/express/node_modules/connect/lib/middleware/session.js:333:9 at /Users/vivekanandan/Source/Git/ExpressApp/CosmicEnergyCoupled/node_modules/express/node_modules/connect/lib/middleware/session/memory.js:52:9 我已经安装了connect-flash来恢复作者(passport-local-strategy)build议的弃用req.flash方法。 请find安装在应用程序中的npm包。 ├──connect-flash@0.1.0 ├──ejs@0.8.3 ├──ejs-locals@0.2.5 ├─┬express@3.0.0 │├──commander@0.6.1 │├─┬connect@2.6.0 ││├──bytes@0.1.0 ││├──formidable@1.0.11 ││├──pause@0.0.1 ││├──qs@0.5.1 ││└─┬send@0.0.4 ││└──mime@1.2.6 │├──cookie@0.0.4 │├──crc@0.2.0 │├──debug@0.7.0 │├──fresh@0.1.0 │├──methods@0.0.1 │├──mkdirp@0.3.3 │├──range-parser@0.0.4 │└─┬send@0.1.0 │└──mime@1.2.6 ├─┬passport@0.1.12 │└──pkginfo@0.2.3 ├─┬passport-local@0.1.6 │├──passport@0.1.12 │└──pkginfo@0.2.3 ├─┬socket.io@0.9.10 │├──policyfile@0.0.4 │├──redis@0.7.2 │└─┬socket.io-client@0.9.10 │├─┬active-x-obfuscator@0.0.1 ││└──zeparser@0.0.5 │├──uglify-js@1.2.5 │├─┬ws@0.4.22 […]

如何使Stylus更新CSS在正确的目录?

使用Node.js + Express,但出于某种原因无法让CSS正常工作。 我有以下两个文件夹: /public/css/lib – 其中.css文件应该去 /public/css/src – 其中.styl文件是 以下configuration: app.configure(function() { app.set('port', process.env.PORT || 3000); app.set('views', __dirname + '/views'); app.set('view engine', 'jade'); app.use(express.favicon()); app.use(express.logger({ format: 'dev' })); app.use(express.bodyParser()); app.use(express.methodOverride()); app.use(express.cookieParser('whatever')); app.use(express.session()); app.use(app.router); app.use(require('stylus').middleware({ src: __dirname + '/public/css/src', dest: __dirname + '/public/css/lib', compress: true, force: true, compile: function(str, path) { return stylus(str) .set('filename', path) […]

Socket.io通过XHR轮询不通过Cookie

我试图将Express(3.x)与NowJS(主要是围绕着Socket.io的封装)结合起来创build一个实时应用程序,首先需要你login。我确实是Node的新手,但是我有一个很好的处理每个包如何独立工作。 但是,从NowJS访问快速会话信息是给我适合的。 这个问题似乎是因为我不得不使用XHR-Polling(使用Heroku作为主机平台),所以我无法轻松访问Socket.io身份validation方法中的cookie信息。 在authFunction下面的代码中,“data.headers.cookie”是未定义的。 以一种迂回的方式(在Now.js代码中),这会在nowjs.on(“connect”,…)callback中留下“this.user.cookie”为空(但不是未定义的)。 这反过来让我无法抓住会议信息。 从阅读来看,似乎cookie只有在使用websocket时才可用。 没有cookie,我不知道哪个用户正在调用服务器,除了为它们生成的随机标识符。 任何人都可以build议如何处理这个? 在build立与Now.js服务器的连接后,是否需要手动从客户端发送cookie? var app = express(); app.configure(function(){ app.set('port', process.env.PORT || 3000); app.set('views', __dirname + '/views'); app.engine('html', consolidate.swig); app.set('view engine', 'html'); app.use(express.favicon()); app.use(express.logger('dev')); app.use(express.bodyParser()); app.use(express.methodOverride()); app.use(express.cookieParser()); app.use(express.session({ secret: "secrethere" , store: sessionStore})); app.use(express.static(path.join(__dirname, 'public'))); app.use(app.router); }); app.configure('development', function(){ app.use(express.errorHandler({dumpExceptions: true, showStack: true})); }); //Map the routes var routes […]