Tag: hapijs

Heroku H12超时错误与Node.js

目前,我正在使用Node hapijs框架开发一个REST API。 API部署在Heroku上。 在API中有一个GET端点,它发出一个get请求来从第三方检索数据并在发送回复之前处理数据。 这个特定的terminal会不时地超时。 当端点超时时, Heroku返回一个H12错误 。 一旦超时,对该端点的后续请求将导致H12错误。 我必须在Heroku上重新启动应用程序才能使端点再次工作。 API中的其他端点不会受到此错误的任何影响,即使在发生错误之后仍能继续正常工作。 在我的debugging过程中,通过查看日志,似乎有些时候,第三方API没有返回响应,导致错误。 我尝试了以下解决scheme来尝试解决问题: 我正在使用请求库来发出请求。 因此,我已经尝试将超时设置为5000毫秒,作为传入请求的选项的一部分。 它有时工作…超时被触发,端点发送与请求相关的超时错误。 这是我想要的那种行为,因为随后对端点的请求工作。 但是,有时候请求超时没有被触发,但Heroku仍然返回一个H12错误(总是在30秒之后,Heroku默认)。 之后,对该端点的后续请求将返回H12错误(也是30秒之后)。 似乎有些过程被“卡住”在Heroku上,并没有终止,直到我重新启动应用程序。 我试着给hapi.js路由configuration对象添加一个超时。 我得到了和上面相同的结果。 我一直在进行研究,并怀疑问题与这里和这里给出的描述有关。 看起来在应用程序服务器级别设置一个超时可以发送一个SIGKILL给Heroku工作人员可能会有所斩获。 在Ruby中看起来相当简单,但我找不到有关如何在Node中执行此操作的更多信息。 任何有识之士都非常感激。 我知道,向第三方提出请求时可能会发生超时。 这不是问题。 问题是terminal似乎在超时后“停滞”在Heroku上,并且变得没有反应。 谢谢您的帮助!

在查询请求的情况下,path的结构是什么?

我正在使用hapi.js,但有一件事情对我来说并不明确。 在这种情况下,我让api请求在path中传递参数,我可以通过在处理程序中调用request.params来获得这些参数。 当我以查询的forms请求应该是什么path? 在第一种情况下,我把path属性放在/ {参数},但在第二个?

AWS Cognito模拟

我想为使用AWS cognito作为用户身份validation服务的基于nodejs的API编写BDDtesting,但是我不想每次运行构build时都碰到真正的cognito服务。 有一个简单而优雅的方式来嘲笑Cognito电话。 使用的框架: Nodejs(Hapi.js) aws-sdk for nodejs

request.auth.session.set(user_info)不工作HapiJS

这是我的策略,它是在server.register()上定义的。 我把我的工作从一个教程,这是从字面上复制,但它不起作用。 server.auth.strategy('standard', 'cookie', { password: 'somecrazycookiesecretthatcantbeguesseswouldgohere', // cookie secret cookie: 'app-cookie', // Cookie name isSecure: false, // required for non-https applications redirectTo: '/login', ttl: 24 * 60 * 60 * 1000 // Set session to 1 day }); server.auth.default({ strategy: 'standard', mode: 'required', scope: ['admin'] }); 这是我的login路线发生错误: server.route({ method: 'POST', path: '/login', config: { […]

Hapi / Joivalidation的float()

我有以下JavaScript代码来testingHapi / Joivalidationfunction: var Joi = require('joi'); var schema = { free: Joi.Types.Number().float() }; var value = { free: 3.3333 }; var err = Joi.validate(value, schema); //err is set if value fails to validate against the schema if (err) throw err; validation抛出错误: Error: the value of free must be an integer 我想知道我做错了什么。 我正在使用Hapi和Joi的当前版本。

实验室返回错误没有方法“实验”

我正在写一个函数的testing代码,将检查在Twitter中的用户名的存在。 我正在使用Hapi框架和实验室进行testing。 当我运行npm test出现以下错误: > NameGen@0.0.0 test /Users/mario/projects/NameGen > ./node_modules/lab/bin/lab -c /Users/mario/projects/NameGen/test/test.js:5 Lab.experiment( "Test Username Existence", function() { ^ TypeError: Object #<Object> has no method 'experiment' at Object.<anonymous> (/Users/mario/projects/NameGen/test/test.js:5:5) at Module._compile (module.js:456:26) at Object.Module._extensions..js [as origLoader] (module.js:474:10) at Object.require.extensions..js (/Users/mario/projects/NameGen/node_modules/lab/lib/coverage.js:32:26) at Module.load (module.js:356:32) at Function.Module._load (module.js:312:12) at Module.require (module.js:364:17) at require (module.js:380:17) at /Users/mario/projects/NameGen/node_modules/lab/lib/cli.js:85:23 at […]

Hapi – 只回复JSON

如何调整Hapi回复函数,使其只回复JSON对象? 我应该把它发送清楚,发送? 我似乎没有find一个好例子 这是一些编辑 – 添加一些示例代码,以了解发生了什么。 路线: server.route({ method: 'GET', path: '/user/', handler: function (request, reply) { var ids = null; mysqlConnection.query('SELECT ID FROM Users;',function(err,rows,fields){ if(err) throw err; ids = rows; // console.log(ids); reply(ids); }); } }); 答复: <html><head></head><body> <pre style="word-wrap: break-word; white-space: pre-wrap;">[{"ID":1},{"ID":2},{"ID":3},{"ID":4},{"ID":5},{"ID":6},{"ID":7},{"ID":8},{"ID":9},{"ID":10},{"ID":11},{"ID":12},{"ID":13},{"ID":14},{"ID":15},{"ID":16},{"ID":17},{"ID":18},{"ID":19},{"ID":20},{"ID":21}] </pre></body></html>

Hapi.js代理 – 在回复之前更改回复

我试图testingHapi.js我正在处理一个新的项目我的目标是在我的Hapi服务器上触发一个请求,这个请求将触发远程服务器上使用Hapi代理的另一个请求,响应将只来自远程响应的特定属性 为了testing这个请求/ api / type3 / name,必须调用API调用GitHub的API来获取用户对象 码: server.route({ method: 'GET', path: '/api/type3/{name}', handler: { proxy: { mapUri: function(request,callback){ callback(null,'https://api.github.com/users/'+request.params.name); }, onResponse: function(err, res, request, reply, settings, ttl){ console.log(res); reply(res); }, passThrough: true, xforward: true } } }); 上面代码的响应是来自GitHub的响应对象现在我需要保存这个响应,所以我可以操纵它,只返回我需要的 但是,当我debugging响应对象,它包含了大量的数据,我无法find它内的响应有效载荷 那么如何只从响应对象中提取GitHub的响应呢? 非常感谢

执行条件后执行它的内容的Javascript

我使用NodeJS v0.10.33 / Javascript有一个奇怪的问题。 我也使用Hapi 8.0.0 , mongoose , moment和request库。 我试图运行一个简单的IF,必须等待方法调用,以确定条件是TRUE还是FALSE。 相反,默认运行,我的代码在条件本身之前运行条件内容。 这就像总是运行“真”,而不用等待被调用方法的返回。 我有这样的事情: function isUpdated(){ var updated = true; if (updated) { console.log("Updated (inside isUpdated)"); } else { console.log("Not updated (inside isUpdated)"); } } if (!isUpdated()) { console.log("Not updated. Updating.."); } else { console.log("Updated"); } 但是当我运行我的服务器时,我得到了: [paladini@pet01 myFolder]$ node server.js Server running at: http://pet01.inf.ufsc.br:3000 […]

JSON输出为空白值的键

所以我有一个字典,我试图从iOS设备发送到Node Hapi服务器。 由于某种原因,我的请求有效载荷是添加字典作为一个空白值的关键。 这是我的iOS代码 NSDictionary *userData = [User userToDictionary: newUserInfo]; NSData *userJSON = [NSJSONSerialization dataWithJSONObject: userData options: kNilOptions error: nil]; NSString *urlString = [NSString stringWithFormat: @"%@%@/addNewUser", kBaseURL, kUsers]; // This will set up the URL NSURL *url = [NSURL URLWithString: urlString]; NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL: url]; [request setHTTPMethod: @"POST"]; [request addValue: @"application/json" forHTTPHeaderField: @"Content-Type"]; […]