标签: hapijs

使用 Hapi 18.1 延迟响应

如何使用Hapi 18.1设置响应延迟,如果 API 响应缓慢,我想看到沙漏旋转。对于我使用的早期版本,setTimeout()如下所示。

server.route({
    method: 'GET',
    path:'/hello',
    handler: (request, h) => {
       setTimeout(() => reply('Hello World!'), 1000);
    }
});
Run Code Online (Sandbox Code Playgroud)

但是 v18.1 抛出错误

server.route({
    method: 'GET',
    path:'/hello',
    handler: (request, h) => {
       setTimeout(() => h.response('Hello World!'), 1000);
    }
});
Run Code Online (Sandbox Code Playgroud)

错误

Debug: internal, implementation, error
    Error: get method did not return a value, a promise, or throw an error
    at module.exports.internals.Manager.execute (C:\Users\javakb\workspace\node_modules\hapi\lib\toolkit.js:48:29)
    at processTicksAndRejections (internal/process/task_queues.js:85:5)
    at async Object.internals.handler (C:\Users\javakb\workspace\node_modules\hapi\lib\handler.js:46:20)
    at async exports.execute (C:\Users\javakb\workspace\node_modules\hapi\lib\handler.js:31:20)
    at async Request._lifecycle (C:\Users\javakb\workspace\node_modules\hapi\lib\request.js:312:32) …
Run Code Online (Sandbox Code Playgroud)

hapijs

3
推荐指数
1
解决办法
198
查看次数

Hapi.js查看没有看到本地脚本

我目前正在开发一个使用Hapi的服务器的应用程序,每当我尝试加载.jade文件时,我都会遇到问题.这是我的index.js文件的当前代码:

var Hapi = require('hapi');

var internals = {};

internals.main = function() {
  var options = {
    views: {
      engines: { jade: 'jade' },
      path: '../app',
      compileOptions: {
        pretty: true
      }
    }
  };

  this._server = new Hapi.createServer('localhost', 8000, options);

  this._server.route({
    method: 'GET',
    path: '/',
    handler: function(request, reply) {
      reply.view('index')
    }
  });
  // Start server.
  this._server.start()
};

internals.main();
Run Code Online (Sandbox Code Playgroud)

该文件包含目录中的一系列本地脚本和CSS文件app,但是当index.jade加载页面时,它不会看到这些本地文件.有什么我需要在我的选项中添加/修改,或者本地脚本和样式文件的位置是使用Hapi进行玉编译的问题?

javascript node.js hapijs

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

CORS不使用hapijs和socket.io

所以我有一个使用hapi js和socket.io设置的服务器

var hapi = require('hapi');
var server = new hapi.Server();
server.connection({
    host : 'localhost',
    port: 3000,
    routes: {cors: true}
});
var io = require("socket.io")(server.listener);
Run Code Online (Sandbox Code Playgroud)

在客户端上

var io = socket.connect(':3000');
Run Code Online (Sandbox Code Playgroud)

当我从localhost访问一切正常,但当我从外部IP访问我得到CORS错误,并且无法使其工作,在服务器上我尝试过io.set( "origins", "*:*" );没有工作,io.set('transports', ['websocket', 'xhr-polling', 'jsonp-polling', 'htmlfile', 'flashsocket']);也没有工作和抛出浏览器上的错误请求错误.我错过了什么吗?非常感谢你的时间.

node.js cors socket.io hapijs

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

Hapi.js - 无法在SPA中提供静态文件

我刚刚尝试制作SPA,但我无法解决index.html依赖关系(比如包括相关的css,js文件).所有js和css文件都无法加载到浏览器中并404在开发控制台中显示错误.

/root
|
|__public
|      ??? spa
|          ??? controllers
|          ??? css
|          ??? html
|          ??? js-self
|          ??? js-vendor
|          ??? services
|_____________ index.html
Run Code Online (Sandbox Code Playgroud)

路线申报

var assets = function(){
    return {
        method: 'GET',
        path: '/{param*}',
        handler: {
            directory :{
                path : 'public',
                index: false
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

所有路线的顺序

  info: ================Registered routes=============
info: Route:    GET /employee
info: Route:    POST    /employee
info: Route:    PUT /employee
info: Route:    DELETE  /employee
info: Route:    POST    /signin
info: Route:    POST …
Run Code Online (Sandbox Code Playgroud)

static-files node.js hapijs

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

使用Joi/Hapi,如何验证所有密钥的哈希条目?

我想允许我的前端将值的哈希值推送到后端.散列可以具有任何(JSON合法)密钥,但每个密钥的值必须适合特定的模式.把它想象成:

extended: {
  tubers: {
    potato: {weight: 1, cost: 2},
    yam: {weight: 1, cost: 1}
  }
}
Run Code Online (Sandbox Code Playgroud)

所以扩展对象有块茎场.块茎领域有许多键,但每个值必须具有整数的权重和成本.

我似乎无法将其映射到我的普通Joi对象模式框架中.

hapijs joi

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

在HapiJS中更好的控制台输出?

我觉得我缺少一些基本的东西,但我无法弄清楚如何在HapiJS中获得更好的控制台输出.

我正在编写一个API,并在出现错误时打印出来.

150516/063815.663,[回复],http:// localhost:3000:post/users {} 500(120ms)

并返回一个回复,说"存在内部服务器错误".

我需要更改什么才能看到错误输出实际是什么?

javascript hapijs

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

如何将Hapi.js插件应用于特定路由?

我有一个用Hapi.js构建的服务器.我创建了一个插件来限制对某些本地网络IP地址的访问,如下所示:

exports.register = function (server, options, next) {
    server.ext({
        type: 'onRequest',
        method: function (request, reply) {
            console.log(request);
            if (
                request.info.remoteAddress.indexOf("192.") !== 0 &&
                request.info.remoteAddress.indexOf("127.") !== 0
            ) {
                return reply.view('error', {
                    error: "I DON'T LIKE YOU"
                });
            }
            return reply.continue();
        }
    });
    next();
};

exports.register.attributes = {
    pkg: { "name": "localOnly" }
};
Run Code Online (Sandbox Code Playgroud)

我想将此插件仅应用于"/ pathA",同时保持所有用户都可以访问"/ pathB"和"/ pathC".因此我尝试这样做:

const server = new Hapi.Server();
server.connection({ port: 8000 });
server.register(require('vision'), err => {
    if (err) throw err;
    server.views(/* removed for brevity */);
    server.route({ …
Run Code Online (Sandbox Code Playgroud)

javascript node.js hapijs

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

Hapi.js + Socket.io在一起

我想和socket.io一起运行Hapi.js.如果我使用相同的服务器为socket.io和hapi应用程序提供单独的连接,那将是很好的,因为我想在我的套接字中使用Hapi auth cookie

我尝试了一些解决方案,但它们都没有工作,我的服务器崩溃了.我尝试在hapi和我的应用程序启动的同一端口上运行socket.io,但我收到"找不到此localhost页面"错误.我做错了什么?任何帮助将不胜感激

这是我的代码:

const Hapi = require('hapi');
const server = new Hapi.Server();
const Config = require('./config/config.js');
const port = Number(process.env.PORT || 3000);
const io = require("socket.io")(port);

server.connection({
    port: port
});

// my routes are here...

io.on("connection", function (socket) {

    console.log('connected');

    // Do all the socket stuff here.

})

server.start(function(err) {

    if (err) {
        console.error(err);
        throw err;
    }

    console.log('Server started at %s', server.info.uri);

});
Run Code Online (Sandbox Code Playgroud)

javascript node.js socket.io hapijs

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

Hapi错误:处理程序方法没有返回值,承诺或抛出错误

我有一个使用Hapi的版本17的NodeJS应用程序,它使用一个返回地图图像的Web服务,但是,当运行下面的代码时,我得到以下错误:

Debug: internal, implementation, error
    Error: handler method did not return a value, a promise, or throw an error
    at module.exports.internals.Manager.execute (C:\map\node_modules\hapi\lib\toolkit.js:52:29)
    at <anonymous>
    at process._tickCallback (internal/process/next_tick.js:188:7)
Run Code Online (Sandbox Code Playgroud)
var Hapi = require('hapi'),
server = new Hapi.Server({
    host: '0.0.0.0',
    port: 8080,
    routes: {
        cors: true
    },
    SphericalMercator = require('sphericalmercator'),
    sm = new SphericalMercator({ size: 256 }),
    prequest = require('request').defaults({ encoding = null });

var wmsUrl = "http://localhost:8088/service/wms?SERVICE=WMS&REQUEST=GetMap&VERSION=1.1.1&STYLES=&FORMAT=image%2Fpng&HEIGHT=383&WIDTH=768&SRS=EPSG%3A3857";

server.route({
    method: 'GET',
    path: '/{layers}/{z}/{x}/{y}.png',
    handler: async (request, h) => {
        var bbox = sm.bbox(request.params., …
Run Code Online (Sandbox Code Playgroud)

node.js hapijs

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

hapi.js版本18.x打字

我最近将项目升级为使用@hapi/hapi节点模块与旧hapi模块。我正在使用版本18.3.1("@hapi/hapi": "^18.3.1")。

随着导入读取,我的打字稿定义不再起作用: import * as Hapi from 'hapi';

运行节点进程时,出现模块未找到错误。有没有办法将类型指向@types/hapi@hapi/hapi模块?

node.js typescript hapijs

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

标签 统计

hapijs ×10

node.js ×7

javascript ×4

socket.io ×2

cors ×1

joi ×1

static-files ×1

typescript ×1