Tag: hapijs

如何防止在使用hapi.js reply()。hold()时重新加载脚本?

我刚开始使用hapi.js,并在尝试推迟路由响应时遇到问题。 我使用这段代码成功推迟了/query路由的响应: server.route([{ method: 'GET', path: '/query', config: { handler: function(request, reply) { var response = reply().hold(); db = request.server.plugins['hapi-mongodb'].db; someFxn(callbackFxn, request, response); } } }]); var someFxn(cb, req, res){ var raw = {}; //… do lots of stuff that can take a long time cb(req, res, raw); } var callbackFxn = function(request, response, data){ […]

无法使用Hapi.js回复设置标题

当我在Hapi.js的回复中添加一个随机标题,它工作正常。 但是,当我试图添加到已存在的标题,它不会被发送。 这几乎就像我甚至没有添加它。 reply("Hello World) .header("Random-Header", "Random Reply") .header("Access-Control-Expose-Headers","Authorization"); 有没有办法添加Access-Control-Expose-Headers – Authorization?

Hapi.js – 设置X-Authorization标头

我想在Hapi.js中对我的路由实施X-Authorization。 所以当我提出请求时,我会创build一个X-Auth头文件,并且希望Hapi在允许执行一些代码之前检查它: 基于Hapi documentaiton的这个代码示例,我该如何实现它? server.route({ method: 'GET', path: '/hello/{user?}', handler: function (request, reply) { const user = request.params.user ? encodeURIComponent(request.params.user) : 'stranger'; reply('Hello ' + user + '!'); }, config: { description: 'Say hello!', notes: 'The user parameter defaults to \'stranger\' if unspecified', tags: ['api', 'greeting'] } });

使用Hapi&Async的API – 如何清空数组/在“回复”或每个新的“get”之后立即执行?

我正在构build一个小API,用于获取数据并对其执行任务(使用asynchronous),使用push将这些数据的一部分存储在数组中,然后用Hapi的reply()将其显示给客户端。 我正在寻找清空我的数组(例如使用arrayname.length = 0)服务器已发送答案的客户端。 目前的代码遵循这个逻辑: let data = [] server.route({ method: 'GET', path: '/api/{data}', handler: function (request, reply) { async.parallel([ function(callback) { // fetch some data, work with it and then add it to our array using push data.push ({ // example data bla:'blabla', number:'10' }); callback(); }, function(callback) { // another time (…) data.push […]

Hapijs – 为所有请求添加cookie

使用Hapijs Node框架,我想确保每个请求都存在一个特定的cookie。 如果它不存在,我想创build它。 我想这样做,而不是手动添加该cookie到每个reply 。 例如,像这样的东西: server.ext('onPreHandler', function (request, reply) { console.log(`state: ${JSON.stringify(request.state)}`) // state == null request.state['my_cookie'] = request.state.my_cookie || 'my data' return reply.continue(); }); server.route({ method: 'GET', path: '/', handler: function(request, reply) { // includes `my_cookie` reply(`Cookies: ${JSON.stringify(request.state)}`); } }) // cookie does not exist in the browser 将该cookie添加到回复中,但需要在应用程序中添加每个回复。 server.route({ method: 'GET', path: […]

为什么我的nodejs pdf上传代码返回状态415“不支持媒体types”

嘿所以我使用Node.js框架Hapi.js做一个简单的file uploadapi。 我收到文件后,我将把PDF文件转换成PNG。 我一直在寻找一些上传文件Hapi.js文件,但没有运气。 收到文件后,我想使用节点文件系统读取它,然后将其传递给命令行工具。 这是我的转换路线: server.route({ method: 'POST', path: '/convert', config: { payload: { output: 'stream', parse: true, allow: ['application/json', 'image/jpeg', 'multipart/form-data','application/pdf'] //allow:'application/json' }, handler:function (request, reply) { console.log(request.raw.req); var data = request.payload; if (data.file) { var name = data.file.hapi.filename; console.log(name); var path = __dirname + "/uploads/" + name; console.log(path); var file = fs.createWriteStream(path); […]

在Hapi.js中我可以redirect到一个不同的端点并设置一个statusCode?

如果用户没有通过authentication来查看特定的路由(例如: /admin ),Auth会抛出一个Boom unorthorized错误我希望能够Boom unorthorized到/login但仍然返回401 HTTP statusCode 。 我们已经尝试了下面的代码: const statusCode = request.output.payload.statusCode; if(statusCode && statusCode === 401) { return reply.redirect('/login').code(statusCode); } 当我们删除.code(statusCode)时, redirect工作,但我们理想地将401代码返回到客户端而不是302 ( redirect ) 或者 …是否是“ 最佳做法 ”返回302 …? 上下文:我们正在开发一个(可重用的 )插件来处理我们的Hapi App / API中的错误,其中一个特性是当auth失败时redirect到/login请参阅https://github.com/dwyl/hapi-错误#redirect到另一个端点 ,我们希望得到它“ 正确 ”,以便其他人可以使用它!

Hapi.js – 添加机制来检查每个路由

我试图实现一个机制,将在任何路线被击中之前运行。 在这个机制中,我想从标题中获取一个值并检查身份validation。 我已经拿出这个:server.js: // Create a server with a host and port 'use strict'; var Hapi = require('hapi'); var mongojs = require('mongojs'); var plugins = [ require('./routes/entities') ]; var server = new Hapi.Server(); server.connection({ port: 3000 }); //Connect to db server.app.db = mongojs('hapi-rest-mongo', ['entities']); server.app.checkHeader = function (request) { var header = request.headers['x-authorization']; if(header === […]

在蓝鸟承诺内执行asynchronous操作

所以,我一直在殴打这个几天,我很难解决什么是最好的解决办法。 我正在使用HAPI的Waterline / dogwater,并试图做一些大致的事情: wardrobe.find({WardrobeId: 5}).then(function(clothes) { //got my clothes in my wardrobe. clothes.find({Type: 'trousers'},{Kind: 'nice ones'}).then(function(trousers) { //got my nice trousers _.each(trousers, function(trouser) { //logic to see if these are my pink trousers console.log('color?', trouser.color); }); console.log('ding'); }); }); 我遇到的麻烦是代码在输出裤子颜色之前总是会ding 。 这是因为,尽我所知, _.each将使代码asynchronous。 我试图介绍承诺(蓝鸟),但没有运气。 我甚至看过发生器(Co),但是我的节点版本在v0.11之前是固定的。 我想在_.each执行一些数据库查询,将这些结果(如果有的话)返回给裤子对象,然后返回: wardrobe.find({WardrobeId: 5}).then(function(clothes) { //got my clothes in my […]

Hapi如何在不使用控制台日志的情况下打印debugging消息

我正在使用hapi和良好的模块,我想知道什么是最好的方式来打印我的debugging消息,而不使用控制台日志。 比如现在是 server.register( { register: require('good'), options: options }, function (err) { if (err) { return console.error(err); } // If the module is required by another script, we don't start the server (ie test suite) if (!module.parent) { server.start(function () { console.info('Server started at ' + server.info.uri); }); } } ); 使用https://github.com/visionmedia/debug就好 server.register( { register: […]