首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HAPI 17:路由未注册

HAPI 17:路由未注册
EN

Stack Overflow用户
提问于 2018-02-02 00:11:28
回答 1查看 707关注 0票数 1

嗨,我正在从16迁移到Hapi 17。我在一个不同的文件中定义了我的路由,我正试图将其注册为插件。但是当我调用API时,我得到了一个404。路由未向服务器注册。

这是我的服务器代码。

代码语言:javascript
复制
 'use strict'
    const Hapi = require('hapi')
    const server = new Hapi.Server({ port: 1234, host: 'localhost' });
    const plugins = [{
      plugin: require('vision'),
      plugin: require('./methods/exampleMethod'),
      plugin: require('./routes/devices')
    }]

    async function registerPlugin(){
        await server.register(plugins)
    }
    registerPlugin().then( () => {server.start()})

这是我的路由文件devices.js:

代码语言:javascript
复制
exports.plugin = {
    register: (server, options) =>
    {
        server.routes = [{
            method: 'GET',
            path: '/v1/devices',
            handler: async function (request, h) {
                const val = server.methods.testMethod("ankur")
                const response = h.response('hello world ankur')
                response.type('text/plain')
                return response
            }
          }]
    },
    name: 'devices'
}

方法文件

代码语言:javascript
复制
exports.plugin = {
    register: (server, options) => {
        server.method(
          {
            name: 'testMethod',
            method: function (id) {
              return new Promise(function (resolve, reject) {
              return resolve("Test method called")
              })
            }
          })
    },
    name: "exampleMethod"

我正在遵循Hapi 17的发行说明,并尝试将路由注册为自定义插件。然而,当我点击Get v1/devices时,我得到了404。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-05 21:49:56

您的routes文件的以下代码将起作用:

代码语言:javascript
复制
 exports.plugin = {
  register: (server, options) => {
    server.route(
      {
        method: "GET",
        path: "/v1/devices",
        handler: async function(request, h) {
          //const val = server.methods.testMethod("ankur")
          const response = h.response("hello world ankur");
          response.type("text/plain");
          return response;
        }
      }
    );
  },
  name: "devices"
};

您应该对路由对象调用server.route()函数。

如果你想通过你的路由插件注册多个函数,使用如下代码:

代码语言:javascript
复制
exports.plugin = {
  register: (server, options) => {
    const routes = [
      {
        method: "GET",
        path: "/v1/devices",
        handler: async function(request, h) {
          const response = h.response("hello world");
          response.type("text/plain");
          return response;
        }
      },
      {
        method: "GET",
        path: "/v1/another",
        handler: async function(request, h) {
          const response = h.response("hello another world");
          response.type("text/plain");
          return response;
        }
      }
    ];

    
    server.route(routes);
  
  },
  name: "devices"
};

编辑:

方法插件

代码语言:javascript
复制
exports.plugin = {
  register: (server, options) => {
    server.method("testMethod", async function(id) {
        return "Test method called";
    });
  },
  name: "exampleMethod"
};

调用该方法:

代码语言:javascript
复制
{
        method: "GET",
        path: "/v1/example",
        handler: async function(request, h) {
          const response = await request.server.methods.testMethod();

          return response;
        }
}

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48567125

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档