标签: hapijs

hapi.js处理错误的最佳方法

我正在使用hapi.js创建我的第一个node.js REST Web服务.我很好奇处理错误的最佳方法,让我们从我的dao层说出来.throw在我的dao层中做他们然后只是try/catch阻止他们处理它们并在我的控制器中发回错误,或者有一个更好的方式,酷孩子正在处理这个?

路线/ task.js

var taskController = require('../controllers/task');
//var taskValidate = require('../validate/task');

module.exports = function() {
  return [
    {
      method: 'POST',
      path: '/tasks/{id}',
      config : {
        handler: taskController.createTask//,
        //validate : taskValidate.blah
      }
    }
  ]
}();
Run Code Online (Sandbox Code Playgroud)

控制器/ task.js

var taskDao = require('../dao/task');

module.exports = function() {

  return {

    /**
     * Creates a task
     *
     * @param req
     * @param reply
     */
    createTask: function createTask(req, reply) {

      taskDao.createTask(req.payload, function (err, data) {

        // TODO: Properly handle errors …
Run Code Online (Sandbox Code Playgroud)

javascript rest node.js hapijs

12
推荐指数
2
解决办法
2万
查看次数

如何使用Server.inject注入模拟测试hapi

我想用实验室测试hapi路由,我正在使用mysql数据库.

使用Server.inject测试路由的问题是我无法模拟数据库因为我没有调用包含处理函数的文件,所以如何在处理程序中注入模拟数据库?

node.js sequelize.js node-mysql hapijs

12
推荐指数
1
解决办法
3041
查看次数

如何在开发过程中制作Hapi自动重装应用程序

我是*Hapi*框架的新手.在开发过程中,每当我对代码进行任何更改时,我都必须重新启动hapi服务器.

对于视图部分,我可以添加一个选项{isCached: false},使视图每次都读取最新的html文件.但是,是否有一个简单的设置,使其在更改时自动重新加载代码?

更新:

感谢dylants的建议,Nodemon非常棒.

但是,在我的应用程序中有一个selenium-standalone子进程,每当nodemon重新启动时,它都会生成一个错误日志....Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again...

我试过https://github.com/remy/nodemon#controlling-shutdown-of-your-script,它没有帮助.

node.js hapijs

12
推荐指数
2
解决办法
4695
查看次数

使用Joi,要求两个字段中的一个非空

如果我有两个字段,我只想验证至少一个字段是非空字符串,但是当两个字段都是空字符串时失败.

这样的事情无法验证

var schema = Joi.object().keys({
    a: Joi.string(),
    b: Joi.string()
}).or('a', 'b');
Run Code Online (Sandbox Code Playgroud)

验证时

{a: 'aa', b: ''}
Run Code Online (Sandbox Code Playgroud)

or条件只测试了两种关键的存在ab,但确实为条件测试是否a还是b如此.Joi.string()空字符串会失败.

以下是一些要展示的测试用例的要点

http://requirebin.com/?gist=84c49d8b81025ce68cfb

javascript hapijs joi

12
推荐指数
2
解决办法
7942
查看次数

如何在hapi.js中自定义验证错误响应?

路由上使用config.validate选项并且由于验证请求失败时,hapi会返回如下错误:

{
    "statusCode": 400,
    "error": "Bad Request",
    "message": "child \"weight\" fails because [\"weight\" is required]",
    "validation": {
        "source": "payload",
        "keys": [
            "weight"
        ]
    }
}
Run Code Online (Sandbox Code Playgroud)

有没有办法发送不同的格式化验证错误?

node.js hapijs

12
推荐指数
1
解决办法
6220
查看次数

Hapi.js从onRequest重定向

我正在使用hapi v6.11.1并且一直试图有条件地将来自我的hapi.js服务器的请求重定向到另一台服务器.这是我到目前为止所做的:

server.on('onRequest',function(request,reply) {

  if(request.headers.customHeader) { // redirect only if header found
    reply('custom header redirection').redirect('http://someurl.com');
    return;
  }

  reply();

});
Run Code Online (Sandbox Code Playgroud)

但上面的解决方案将无法工作,仍然命中我的服务器而不是我指定的服务器.

我尝试在'onRequest'处理程序上执行reply.proxy()并得到以下错误:

错误:未捕获错误:如果解析了有效负载或输出不是流或数据,则无法进行代理

在尝试找出解决方案时,我从hapi.js文档中发现了以下内容:

仅在处理程序方法中可用,并且仅在reply(),reply.file(),reply.view(),reply.close(),reply.proxy()或reply.redirect()之一之前调用.

但问题是我有大约100条路线,我现在必须更改每个请求的处理程序以允许代理,如果我的条件得到满足,我不想这样做.

如果有以下任何一种可能,我会很高兴的:

  1. 将请求从'onResponse'重定向到另一个域,而不是更改处理函数.

  2. 服务器方法,可以允许我配置所有路由配置并在其上注入代理重定向.

谢谢.

proxy redirect hapijs

12
推荐指数
1
解决办法
1876
查看次数

Nodejs Hapi - 如何启用跨源访问控制

我正在使用HapiJs Restful Web服务并尝试启用cors,因此即使来自不同域的任何客户端也可以使用我的服务.我在服务器连接对象中尝试了cors = true但没有工作.

javascript node.js hapijs

12
推荐指数
1
解决办法
2万
查看次数

是否有与Hapi兼容的库以获得细粒度的ACL /用户权限?

希望使用HapiJS作为我们的API服务器.我们需要细粒度的用户权限,例如"用户A可以编辑字段B""用户C可以查看字段D"以获得给定的模型/资源.

在我们开始构建之前,我一直在寻找是否已经完成了与Hapi兼容的类似事情.

permissions acl node.js user-permissions hapijs

11
推荐指数
1
解决办法
1801
查看次数

hapi.js - 404路由VS静态文件路由

我正在尝试将我的Express应用程序迁移到hapi.js,并且我的路线出现问题.我只想要2 GET:我的索引'/',以及不是'/'的所有内容都重定向到'/'.

使用Express我有这个:

// static files
app.use(express.static(__dirname + '/public'));

// index route
app.get('/', function (req, res) { 
  // whatever
}

// everything that is not /
app.get('*', function(req, res) { 
  res.redirect('/');
});
Run Code Online (Sandbox Code Playgroud)

我有hapi.js的问题,以获得相同的行为.我的"静态路"看起来像这样:

server.route({
  method: 'GET',
  path: '/{path*}',
  handler: {
    directory: {
      path: 'public',
      listing: false
    }
  }
});
Run Code Online (Sandbox Code Playgroud)

而我的"404道路"将是:

server.route({ 
  method: 'GET', 
  path: '/{path*}', 
  handler: function (request, reply) {
    reply.redirect('/');
  }
});
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

Error: New route /{path*} conflicts with existing /{path*}
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?

redirect node.js http-status-code-404 hapijs

11
推荐指数
1
解决办法
3503
查看次数

TypeError:server.connection不是Hapi nodejs中的函数

我开始使用Hapi nodejs框架.我使用的是"hapi@17.2.0",这是我在server.js中的代码来启动应用程序.

'use strict';

const Hapi = require('hapi');

const server = new Hapi.Server();
server.connection({ port: 3000, host: 'localhost' });

server.route({
    method: 'GET',
    path: '/',
    handler: function (request, reply) {
        reply('Hello, world!');
    }
});

server.start((err) => {

    if (err) {
        throw err;
    }
    console.log(`Server running at: ${server.info.uri}`);
});
Run Code Online (Sandbox Code Playgroud)

node server.js从终端运行我的项目之后,它会抛出错误,如下所示.

/var/www/html/hello_hapi/server.js:6
server.connection({ port: 3000, host: 'localhost' });
       ^

TypeError: server.connection is not a function
    at Object.<anonymous> (/var/www/html/hello_hapi/server.js:6:8)
    at Module._compile (module.js:612:30)
    at Object.Module._extensions..js (module.js:623:10)
    at Module.load (module.js:531:32)
    at tryModuleLoad (module.js:494:12)
    at …
Run Code Online (Sandbox Code Playgroud)

node.js hapijs

11
推荐指数
1
解决办法
2746
查看次数