【问题标题】:Build API with redis and hapi使用 redis 和 hapi 构建 API
【发布时间】:2020-08-07 21:31:15
【问题描述】:

我正在尝试通过 hapi 从 redis 发送 get 的结果,但我一直收到 500。如何将 redis get 的结果发送给客户端。代码和错误如下。

错误

调试:内部、实现、错误

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

{
    statusCode: 500,
    error: "Internal Server Error",
    message: "An internal server error occurred"
}

代码

'use strict';
const Hapi = require('@hapi/hapi');
const redis = require("redis");
const client = redis.createClient();

client.on("error", function (error) {
  console.error(error);
});

const init = async () => {

  const server = Hapi.server({
    port: 3001,
    host: 'localhost'
  });

  server.route({
    method: 'GET',
    path: '/api/v1/key/{id}',
    handler: (request, h) => {
      client.get(request.params.id, (err, res) => {
        if (err) {
          h.response(err)
        } else {
          h.response(res)
        }
      });
    }
  });

  await server.start();
  console.log('Server running on %s', server.info.uri);
};

process.on('unhandledRejection', (err) => {

  console.log(err);
  process.exit(1);
});

init();

【问题讨论】:

    标签: node.js api redis hapi


    【解决方案1】:

    我想通了。您可以将 redis 模块转换为 Promise 并从那里返回值。

    'use strict';
    const Hapi = require('@hapi/hapi');
    const redis = require('redis');
    const client = redis.createClient();
    const { promisify } = require("util");
    const getAsync = promisify(client.get).bind(client);
    const setAsync = promisify(client.set).bind(client);
    
    client.on("error", function (error) {
        console.error(error);
    });
    
    const init = async () => {
    
        const server = Hapi.server({
            port: 5000,
            host: 'localhost'
        });
    
        server.route({
            method: 'GET',
            path: '/api/v1/key/{id}',
            handler: (req, h) => {
                return getAsync(req.params.id).then(res => {
                    console.log(res)
                    return res
                }).catch(err => {
                    console.error(err)
                    return err
                });
            }
    
        })
    
        server.route({
            method: 'post',
            path: '/api/v1/key',
            handler: (req, h) => {
                return setAsync(req.payload.hash, req.payload.key).then(res => {
                    console.log(res)
                    return res
                }).catch(err => {
                    console.error(err)
                    return err
                })
            }
    
        })
    
        await server.start();
        console.log('Server running on %s', server.info.uri);
    };
    
    process.on('unhandledRejection', (err) => {
    
        console.log(err);
        process.exit(1);
    });
    
    init();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-30
      • 1970-01-01
      • 2016-04-12
      • 2014-02-22
      • 1970-01-01
      • 1970-01-01
      • 2012-11-18
      相关资源
      最近更新 更多