使用 redis 和 hapi 构建 API
Build API with redis and hapi
我正在尝试通过 hapi 发送从 redis 获取的结果,但我一直收到 500。如何将 redis 获取的结果发送到客户端。代码和错误如下。
错误
调试:内部、实现、错误
错误:处理程序方法没有return值、承诺或抛出错误
{
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();
我明白了。您可以将 redis 模块转换为 promise 和 return 值。
'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();
我正在尝试通过 hapi 发送从 redis 获取的结果,但我一直收到 500。如何将 redis 获取的结果发送到客户端。代码和错误如下。
错误
调试:内部、实现、错误
错误:处理程序方法没有return值、承诺或抛出错误
{
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();
我明白了。您可以将 redis 模块转换为 promise 和 return 值。
'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();