我正在创建一个api实例的通用实例来保持我的代码DRY。遇到导出函数的问题:
TypeError: request is not a function
index.js
var express = require('express'),
app = express();
const axios = require("axios");
const request = require("./request");
app.get("/api", (req, res) => {
request({
method: 'get',
url: 'https://jsonplaceholder.typicode.com/posts/1'
}).then((resp) => {
console.log(resp);
})
});
app.listen(3000);
request.js
const axios = require("axios");
/**
* Create an Axios Client with defaults
*/
const client = axios.create({
// baseURL: constants.api.url
});
/**
* Request Wrapper with default success/error actions
*/
module.exports.request = function(options) {
const onSuccess = function(response) {
console.debug('Request Successful!', response);
return response.data;
}
const onError = function(error) {
console.error('Request Failed:', error.config);
if (error.response) {
// Request was made but server responded with something
// other than 2xx
console.error('Status:', error.response.status);
console.error('Data:', error.response.data);
console.error('Headers:', error.response.headers);
} else {
// Something else happened while setting up the request
// triggered the error
console.error('Error Message:', error.message);
}
return Promise.reject(error.response || error.message);
}
return client(options)
.then(onSuccess)
.catch(onError);
}
原始代码是用es6编写的,但我想节点不能正常工作,所以我想转换上面的函数,以便节点可以运行它。
答案 0 :(得分:1)
module.exports.request = ...
您刚刚导出了一个具有request
功能的对象。那个对象不是一个功能。
答案 1 :(得分:0)
要在节点中执行此ES6样式,您需要将方法定义为consts:
const onSuccess(response) => {
...
}
const onError(error) => {
...
}
然后export {onSuccess, onError}
如果ES6在您的节点项目安装babel中不起作用。