我需要一种从我的FeatherJS(基于Express的NodeJS框架)应用程序调用远程REST-API的方法。
我发现有几篇建议使用请求模块的帖子很好:https://github.com/request/request
现在我有使用FeatherJS有更好的建议吗?或者请求模块是否正常?
答案 0 :(得分:1)
我推荐request-promise
模块,因为Feathers服务期望承诺。以下是一个示例服务from this post how to make an existing API real-time:
const feathers = require('feathers');
const rest = require('feathers-rest');
const socketio = require('feathers-socketio');
const bodyParser = require('body-parser');
const handler = require('feathers-errors/handler');
const request = require('request-promise');
// A request instance that talks to the API
const makeRequest = request.defaults({
baseUrl: 'https://todo-backend-rails.herokuapp.com',
json: true
});
const todoService = {
find(params) {
return makeRequest(`/`);
},
get(id, params) {
return makeRequest(`/${id}`);
},
create(data, params) {
return makeRequest({
uri: `/`,
method: 'POST',
body: data
});
},
update(id, data, params) {
// PATCH and update work the same here
return this.update(id, data, params);
},
patch(id, data, params) {
return makeRequest({
uri: `/${id}`,
method: 'PATCH',
body: data
});
},
remove(id, params) {
// Retrieve the original Todo first so we can return it
// The API only sends an empty body
return this.get(id, params).then(todo => makeRequest({
method: 'DELETE',
uri: `/${id}`
}).then(() => todo));
}
};
// A normal Feathers application setup
const app = feathers()
.use(bodyParser.json())
.use(bodyParser.urlencoded({ extended: true }))
.configure(rest())
.configure(socketio())
.use('/todos', todoService)
.use('/', feathers.static(__dirname))
.use(handler());
app.listen(3030);