Tag: restify

什么“在读取和parsingHTTP请求体时阻塞你的链”是什么意思?

我正在阅读有关Node.JS restify。 根据其functionbodyParser()的定义,它指出: 在阅读和parsingHTTP请求主体时阻止您的链。 打开Content-Type并执行适当的逻辑。 application / json,目前支持application / x-www-form-urlencoded和multipart / form-data。 我很困惑什么“阻止你的链阅读和parsingHTTP请求体”的手段。 同时也困惑于在切换内容types时需要执行什么逻辑

什么dtrace脚本输出的手段?

我正在跟踪我的restify.js应用程序中的DTrace探测器(将其重新定义为提供dtrace支持的node.js中的http服务器)。 我使用restify文档中的示例dtrace脚本: #!/usr/sbin/dtrace -s #pragma D option quiet restify*:::route-start { track[arg2] = timestamp; } restify*:::handler-start /track[arg3]/ { h[arg3, copyinstr(arg2)] = timestamp; } restify*:::handler-done /track[arg3] && h[arg3, copyinstr(arg2)]/ { @[copyinstr(arg2)] = quantize((timestamp – h[arg3, copyinstr(arg2)]) / 1000000); h[arg3, copyinstr(arg2)] = 0; } restify*:::route-done /track[arg2]/ { @[copyinstr(arg1)] = quantize((timestamp – track[arg2]) / 1000000); track[arg2] = 0; } […]

重新设置js的默认根页面

我正在尝试使用node.js restify编写宁静的应用程序。 这是我的应用程序的代码: var restify = require('restify'); var server = restify.createServer(); server.get(/.*/, restify.serveStatic({ directory: 'content', default: 'index.html' })); server.listen(3000, function() { console.log('%s listening at %s', server.name, server.url); }); 所以,我只能通过http://localhost:3000/index.html 。 我也期待看到我的index.html页面的根url, http://localhost:3000/但现在我收到了 {"code":"ResourceNotFound","message":"/"}

PassportJs。 我怎样才能得到Facebook的redirecturi没有redirect用户后调用passport.authenticate('脸谱')

我有一个NodeJs REST服务,我们把它叫做NodeRest在我的后端和AngularJs在我的前端。 假设NodeRest与移动应用程序以及Web应用程序一起使用,这是AngularJs应用程序。 NodeRest的体系结构在使用PassportJs时应该解决以下问题: 服务器不应该将用户redirect到Facebook来授权何时 app.get('/auth/facebook', passport.authenticate('facebook')); 已被调用。 如果要redirect它,客户端将不会得到任何东西,因为callbackURL链接到NodeRest httpL // noderest / facebook / callback。 相反,它应该提供redirect的URI,所以我可以把它发回客户端(angularJs,移动等…)。 这样的笑话: app.get('/auth/facebook', passport.authenticate('facebook', function(redirectUri){ //emit socket event to the client with redirect uri as a response data. })); 我在授权过程中决定使用socket.io作为通信通道。 客户: var socket = io.connect(baseUrl); socket.on('auth:facebook:callback:getCalled', function (data) { // callback get called on server side. // user has […]

如何在restify上缩放socket.io?

我正在尝试缩放运行restify的socket.io。 我能够将其设置为在一个nodejs实例上运行良好。 现在,当我将应用扩展到四个实例时,应用生态系统崩溃了(即客户端之间的事件没有正确同步)。 我正在寻找关于如何设置restify的粘性会话的例子。 或者,现在怎么样? Sticky会话的更新是在一年前: Socket 1.0更新/可伸缩性 。 我发现这两个博客设置这个,但他们都使用快递,也写了一年多前: 第1条 第二条 由于我正在制作一个无头API,所以我认为Express不应该被使用。 这是推荐的思维方式还是我应该使用Express? package.json: "dependencies": { "hiredis": "^0.4.1", "pouchdb": "^4.0.3", "pouchdb-upsert": "^1.1.3", "redis": "^2.0.1", "restify": "^4.0.0", "socket.io": "^1.3.7" } 任何帮助,将不胜感激!

在GZip编码时进入正文

我正在将HTTP请求正文中的数据发送到具有gzip内容编码的Restify实例。 唯一的问题是我无法访问身体与gzip的数据。 这里是我用来确定它的JS代码,但是req.body是undefined: server.use(function(req, res, next) { if(req.headers['content-encoding'] == 'gzip') { console.log(req); // We have a gzipped body here var zlib = require("zlib"); var gunzip = zlib.createGunzip(); console.log("Body: "+ req.body) console.log("Length: " + req.body.length); } else { apiKey = req.query['apiKey']; authenticateAndRoute(apiKey, req, res, next) } }) 任何人都有关于如何访问这里或相当于req.body的线索?

Node.jsstream直接上传到Google云端存储

我有一个运行在Google Compute VM实例上的Node.js应用程序,它直接从POST请求(不通过浏览器)接收file upload,并将传入的数据stream式传输到Google Cloud Storage(GCS)。 我正在使用Restify b / c我不需要Express的额外function,因为它可以很容易地stream入传入的数据。 我为这个文件创build一个随机的文件名,把传入的req转移到一个整洁的小节点封装器(可以在这里find: https : //github.com/bsphere/node-gcs ),它向GCS发出一个PUT请求。 使用PUT的GCS文档可以在这里find: https : //developers.google.com/storage/docs/reference-methods#putobject …它说如果使用chunked transfer encoding Content-Length是不必要的。 好消息:该文件正在相应的GCS存储“桶”内创build! 坏消息: 我还没有想出如何从Restify获取传入文件的扩展名(注意手动设置'.jpg' 和 content-type )。 该文件正在经历轻微的腐败(几乎可以肯定地做我做错了PUT请求)。 如果我从Google下载POST文件,OSX告诉我它的损坏…但是,如果我使用PhotoShop,它打开,看起来很好。 更新/解决scheme 正如vkurchatkin所指出的vkurchatkin ,我需要parsingrequest对象,而不是仅仅把所有东西都传送给GCS。 在尝试了更轻的busboy模块之后,我决定使用multiparty更容易一些。 为了dynamic设置Content-Type ,我简单地使用Mimer ( https://github.com/heldr/mimer ),引用传入文件的文件扩展名。 重要的是要注意,由于我们正在pipe道part对象, part头必须被清除。 否则,意想不到的信息,特别是content-type将被传递,并且可能会与我们试图明确设置的content-type冲突。 以下是适用的修改后的代码: var restify = require('restify'), server = restify.createServer(), GAPI = require('node-gcs').gapitoken, GCS […]

未定义的Restify返回值不是错误对象中的函数

我有一个下面的Restify自定义错误,正在抛给我的BlueBird Promise catch块。 var test = function() { respObject = { hello: { world: 'aasas' } }; throw new restify.errors.ServiceError(respObject, 422); } 然后在ServiceError中: function ServiceError(respObject, statusCode) { restify.RestError.call(this, { restCode: 'ApiError', statusCode, statusCode, message: 'Api Error Occurred', constructorOpt: ServiceError, body: { message: 'Api Error Occurrede', errors: respObject.toJSON() } }); this.name = 'CustomApiError'; } util.inherits(ServiceError, restify.RestError); […]

如何在node.js上进行一些authentication后避免请求stream丢失的数据?

请求stream如何与node.js(express或restify)一起工作? 当试图将audio,mpeg或其他二进制文件上载到服务器的客户端时,请求应该是服务器上的可读stream。 我们可以使用request.pipe()将其传入另一个stream,例如从请求中获取文件,然后使用knox将file upload到amazon s3。 当我使用asynchronous身份validation方法时,部分stream式数据正在丢失,并且长度与传输的content-length头部不再匹配。 有什么办法可以避免这种行为? 请求stream的数据只存储在内存中还是node.js将数据存储在某个本地临时文件夹中? var express = require('express'), app = express(), passport = require('passport'), BasicStrategy = require('passport-http').BasicStrategy; var users = [ { id: 1, username: 'bob', password: 'secret', email: 'bob@example.com' } , { id: 2, username: 'joe', password: 'birthday', email: 'joe@example.com' } ]; function findByUsername(username, fn) { for (var i = […]

如何处理(即logging)调整中的错误

在我们的restify应用程序中,当我们传递一个错误到next ,返回一个通用的500错误,这一切都很好。 不过,我还需要在某处logging错误的详细信息,以便我知道发生了什么事情。 以前,我在一个快速应用程序上工作,而且一个集中的error handling中间件使我们能够在接收到错误时执行任意代码,例如日志logging。 集中logging错误细节的“调整方式”是什么? 我不想在整个应用程序中散布日志logging。