标签: hapijs

hapi和node.js创建REST API服务器

我希望构建一个包含大量数据更新和读取以及用户身份验证的Web服务.

哪一个是hapi,restify或表达Rest API 的更好选择? 请随意提出我尚未偶然发现的任何其他框架.

经过大量的搜索,我能找到的所有教程都使用了hapi framework pre v2.0.您能否建议我使用hapi和node.js构建Web API服务器的一些很好的教程?

我正在使用MongoDB来获取数据.

api rest node.js restify hapijs

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

错误:模式必须是RegExp

我需要接受一个手机号码作为网络服务的输入,但我在使用Joi框架验证时面临以下问题.

Joi说:

Error: pattern must be a RegExp
    at Object.exports.assert (/home/gaurav/Gaurav-Drive/code/nodejsWorkspace/ragchews/node_modules/joi/node_modules/hoek/lib/index.js:524:11)
    at internals.String.regex (/home/gaurav/Gaurav-Drive/code/nodejsWorkspace/ragchews/node_modules/joi/lib/string.js:107:10)
    at /home/gaurav/Gaurav-Drive/code/nodejsWorkspace/ragchews/src/validators/userValidator.js:10:40
    at Object.<anonymous> (/home/gaurav/Gaurav-Drive/code/nodejsWorkspace/ragchews/src/validators/userValidator.js:13:2)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.require (module.js:364:17)
Run Code Online (Sandbox Code Playgroud)

用于验证:

var userProfileValidation = function(){
    return {
        payload : {
            uid: Joi.string().required().alphanum().length(userConfigs.UID_LENGTH),
            mobile_num: Joi.string().required().regex('^[0-9]*$').length(userConfigs.RMN_LENGTH) //for this guy
        }
    };
}();
Run Code Online (Sandbox Code Playgroud)

我检查了正则表达式freeformatter,它似乎为atleast一些投入正常工作.我不明白为什么joi会抛出这个错误.

regex node.js hapijs joi

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

使用hapijs/joi验证参数之间的关系

我试图从一个相互依赖的查询字符串验证可选参数.换句话说,当添加参数A时,还需要参数B. 这两个参数都是可选的,因此当它们都没有提供时,验证也应该通过.

应该通过:

?a=1&b=2&c=0
?c=0
Run Code Online (Sandbox Code Playgroud)

应该失败:

?a=1&c=0
?b=2&c=0
Run Code Online (Sandbox Code Playgroud)

有人能给我一个关于如何解决这个问题的示例模式吗?

javascript node.js hapijs joi

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

为什么我不能在 Hapi 中创建 HEAD 路线?

根据文档https://hapijs.com/api/16.0.1#route-configuration,路由方法可能不是“HEAD”类型,但我不明白为什么我不能覆盖该行为。

hapijs

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

使用 hapi 从 NodeJS 服务器下载文件

我想使用 hapi 创建一个文件下载 API。不使用res.download(),如何使用reply()

javascript node.js hapijs

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

如何在Hapijs中获取原始请求主体的缓冲区?

使用body-parser + expressjs是可以的.但我的问题是:如何在Hapijs中获取原始请求体的缓冲区?

我正在谈论的事情就像buf身体解析器npm包的这个函数中的参数:verify(req,res,buf,encoding)

我在messenger-platform-samples例子中需要它来实现这个功能:

function verifyRequestSignature(req, res, buf) {
  var signature = req.headers["x-hub-signature"];
  if (!signature) {
    console.error("Couldn't validate the signature.");
  } else {
    var elements = signature.split('=');
    var method = elements[0];
    var signatureHash = elements[1];
    var expectedHash = crypto.createHmac('sha1', APP_SECRET)
                             .update(buf)
                             .digest('hex');
    if (signatureHash != expectedHash) {
      throw new Error("Couldn't validate the request signature.");
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

编辑:我需要在我的中间件中使用它server.ext(),如下所示:

server.ext({
  type: 'onRequest',
  method: (request, reply) => {
    var signature = request.headers["x-hub-signature"];

    if (!signature) …
Run Code Online (Sandbox Code Playgroud)

node.js hapijs body-parser

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

语法错误:意外令牌 = 内部 /node_modules/hapi/lib/server.js:107

我开始使用 hapijs 并用它设置了一个新的练习项目以进行更深入的研究。我成功设置了一次,它工作正常,但在运行 node server.js 时突然开始抛出错误,如下所示。

/Library/WebServer/Documents/hello_hapi/node_modules/hapi/lib/server.js:107
    decorate(type, property, method, options = {}) {
                                             ^

SyntaxError: Unexpected token =
    at exports.runInThisContext (vm.js:53:16)
    at Module._compile (module.js:373:25)
    at Object.Module._extensions..js (module.js:416:10)
    at Module.load (module.js:343:32)
    at Function.Module._load (module.js:300:12)
    at Module.require (module.js:353:17)
    at require (internal/module.js:12:17)
    at Object.<anonymous> (/Library/WebServer/Documents/hello_hapi/node_modules/hapi/lib/index.js:5:16)
    at Module._compile (module.js:409:26)
    at Object.Module._extensions..js (module.js:416:10)
Run Code Online (Sandbox Code Playgroud)

version node.js hapijs

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

条纹验证网络钩子签名 HMAC sha254 HAPI.js

我正在尝试在我的 hapi.js 应用程序中验证由 stripe 发送的 webhook。我已按照此处详细说明的说明进行操作:

https://stripe.com/docs/webhooks/signatures

(我显然没有在这里发布我的端点秘密:)

<!-- language: lang-js -->

const enpointSecret = ######;

const sig = _.fromPairs(request.headers["stripe-signature"].split(',')
.map(s => s.split('=')));
// produces object eg { t: '1111', v1: '111111..', v0: '...'} etc


const signed_payload = `${sig.t}.${JSON.stringify(request.payload)}`;

const hmac = crypto.createHmac('sha256', endpointSecret)
.update(signed_payload)
.digest('hex');
Run Code Online (Sandbox Code Playgroud)

生成的 hmac 与标头 (sig.v1) 中的签名不匹配。我无法弄清楚我做错了什么......

我正在本地开发 - 并使用 ngrok,以便我可以测试我的 webhooks。这可能是一个问题吗?谢谢

node.js stripe-payments cryptojs ngrok hapijs

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

如何在 apollo-server-hapi graphql 上实现缓存

我有graphql apollo-server-hapi。我尝试添加缓存控制,如下所示:

const graphqlOptions = {
  schema,
  tracing: true,
  cacheControl: true,
};
Run Code Online (Sandbox Code Playgroud)

但是当我尝试在架构基础上添加缓存选项时:

type Author @cacheControl(maxAge: 60) {
  id: Int
  firstName: String
  lastName: String
  posts: [Post]
}
Run Code Online (Sandbox Code Playgroud)

我收到此错误消息:

Error: Unknown directive "cacheControl".
Run Code Online (Sandbox Code Playgroud)

你能帮忙吗,在架构上应用缓存控制的正确方法是什么?

我按照下面的说明进行操作,但似乎不起作用。

阿波罗缓存控制

caching hapijs graphql apollo-server

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

Joi 验证字符串().trim() 不起作用

我正在使用 @hapi/joi 进行快速验证和卫生。验证时,某些验证器不工作。在这个中,trim() 不仅不会验证输入字符串开头和结尾的空格,而且它也不会修剪它,因为它应该默认将 convert 设置为 true。但是,检查有效电子邮件和需要两者都可以工作并抛出各自的错误。我也试过小写(),但没有验证或将其转换为小写。

const Joi = require("@hapi/joi");

const string = Joi.string();

const localRegistrationSchema = Joi.object().keys({
  email: string
    .email()
    .trim()
    .required()
    .messages({
      "string.email": "Email must be a valid email address",
      "string.trim": "Email may not contain any spaces at the beginning or end",
      "string.empty": "Email is required"
    })
});
Run Code Online (Sandbox Code Playgroud)

validation express hapijs joi

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