【问题标题】:Hapijs throws 'cannot throw non-error object error' when returning data from level db in Node从 Node 中的级别 db 返回数据时,Hapijs 抛出“无法抛出非错误对象错误”
【发布时间】:2018-08-05 19:09:28
【问题描述】:

我一直在努力解决这个问题:

尝试:在 Hapijs 中通过 GET 请求从 levelDB 返回数据。 但是得到:

Debug: internal, implementation, error 
    Error: Cannot throw non-error object
    at module.exports.internals.Manager.execute (.../node_modules/hapi/lib/toolkit.js:42:33)
    at <anonymous>

首先不应该有错误。在 Node REPL 环境中检索数据可以正常工作。通过 POST 请求将数据放入数据库中也可以正常工作。

用于获取和检索数据的 LevelDB 辅助函数:

/** Helper functions to interact with the address levelDB */

const level = require('level');
const addressDB = './adressdata';
const db = level(addressDB);

function addAddressToDB(address) {
  return new Promise( (resolve, reject ) => {
    db.put(address.toString(), 'valid')
      .then( () => resolve('Stored Address.'))
      .catch(err => reject(err));
  });
}

// Checks how many stars an address still can create
function getAddressInfo(address) {
  return new Promise( (reject, resolve) => {
    db.get(address.toString())
      .then(value => resolve(value))
      .catch(err => reject(err));
  });
}

module.exports = {
  addAddressToDB: addAddressToDB,
  getAddressInfo: getAddressInfo
};

Hapijs 服务器配置:

'use strict';

// Basic server setup
const Hapi = require('hapi');
const addressDB = require('./addressdb-utilities');

const server = Hapi.server({
    port: 8000,
    host: 'localhost'
});
// Helper to Add Address
  server.route({
    method: 'POST',
    path: '/addAddress',
    config: {
      handler: async (request, response) => {
        try {
          let address = request.payload.address;
          let response = await addressDB.addAddressToDB(address, 'valid')

          return response;
        } catch(err) { throw new Error(err) }
      }
    }
  });

  // Helper to retrieve address
  server.route({
    method: 'GET',
    path: '/address/{address}',
    handler: async (request, h) => {
      let address = encodeURIComponent(request.params.address);
      let status = await addressDB.getAddressInfo(address); // This line causes the error
      console.log('Address: ', address);
      console.log('Address Type: ', typeof address);
      console.log(status);
      return 'status';
    }
  });
// Initialize server
const init = async () => {
    await server.start();
    console.log(`Server running at: ${server.info.uri}`);
    return;

};

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

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

init();

将所有内容包装在 try/catch 博客中不会导致服务器上出现错误消息,但会在请求时响应代码 500。仅仅解决错误和价值也不会改变任何事情。

我非常感谢您提供更多调试的每一个提示,以及要尝试的事情。到目前为止,我没有想法,研究也没有帮助。希望您能找到这里提供的所有信息。

环境:

  • 节点版本:8.11.3
  • Hapi 版本:17.5.3
  • 级别版本:4.0.0
  • 操作系统:OSX 10.13.6(High Sierra)

【问题讨论】:

    标签: node.js hapijs leveldb


    【解决方案1】:

    经过很多很多小时的调试。我意识到承诺参数的顺序错误......所以拒绝解决,反之亦然。

    【讨论】:

    • 有什么机会,我做了同样的事情,但参数命名错误。谢谢
    猜你喜欢
    • 2019-11-16
    • 2011-08-07
    • 2015-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多