Nodejs无法导出函数

时间:2018-01-03 20:44:00

标签: javascript node.js

我正在创建一个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编写的,但我想节点不能正常工作,所以我想转换上面的函数,以便节点可以运行它。

2 个答案:

答案 0 :(得分:1)

module.exports.request = ...

您刚刚导出了一个具有request功能的对象。那个对象不是一个功能。

答案 1 :(得分:0)

要在节点中执行此ES6样式,您需要将方法定义为consts:

const onSuccess(response) => { ... } const onError(error) => { ... }

然后export {onSuccess, onError} 如果ES6在您的节点项目安装babel中不起作用。