Node.js 如何在节点中的另一个JS文件中加载JS文件

Node.js 如何在节点中的另一个JS文件中加载JS文件,node.js,Node.js,无法在我的应用程序中加载JS文件(未定义),我希望模拟与普通HTML中的标记相同的效果 我试过了 从‘/Api’->导入Api告诉我,定义的函数中没有一个是函数(没有任何循环依赖项),所以我最好猜测Api不是初始化的还是什么 已尝试Api上的module.exports->告诉我Api未定义 tested exports.Api->告诉我尝试从Api调用的函数不是函数 我试着去要求,还有一些我甚至记不起来的东西,但似乎都不起作用。主要的问题是,我不知道讨论中的JS文件的格式,因为我从未见过一个变

无法在我的应用程序中加载JS文件(未定义),我希望模拟与普通HTML中的标记相同的效果

我试过了

从‘/Api’->导入Api告诉我,定义的函数中没有一个是函数(没有任何循环依赖项),所以我最好猜测Api不是初始化的还是什么

已尝试Api上的module.exports->告诉我Api未定义

tested exports.Api->告诉我尝试从Api调用的函数不是函数

我试着去要求,还有一些我甚至记不起来的东西,但似乎都不起作用。主要的问题是,我不知道讨论中的JS文件的格式,因为我从未见过一个变量声明为包含其他函数的函数,所以对此的解释可能会很有用


var Api = (function() {
  var requestPayload;
  var responsePayload;
  var messageEndpoint = '/api/message';

  var sessionEndpoint = '/api/session';

  var sessionId = null;

  // Publicly accessible methods defined
  return {
    sendRequest: sendRequest,
    getSessionId: getSessionId,

    // The request/response getters/setters are defined here to prevent internal methods
    // from calling the methods without any of the callbacks that are added elsewhere.
    getRequestPayload: function() {
      return requestPayload;
    },
    setRequestPayload: function(newPayloadStr) {
        requestPayload = JSON.parse(newPayloadStr);
    },
    getResponsePayload: function() {
      return responsePayload;
    },
    setResponsePayload: function(newPayloadStr) {
      responsePayload = JSON.parse(newPayloadStr);
    },
    setErrorPayload: function() {
    }
  };

  function getSessionId(callback) {
    var http = new XMLHttpRequest();
    http.open('GET', sessionEndpoint, true);
    http.setRequestHeader('Content-type', 'application/json');
    http.onreadystatechange = function () {
      if (http.readyState === XMLHttpRequest.DONE) {
        var res = JSON.parse(http.responseText);
        sessionId = res.session_id;
        callback();
      }
    };
    http.send();
  }

  // Send a message request to the server
  function sendRequest(text, context) {
    // Build request payload
    var payloadToWatson = {
      session_id: sessionId
    };

    payloadToWatson.input = {
      message_type: 'text',
      text: text,
    };

    if (context) {
      payloadToWatson.context = context;
    }

    // Built http request
    var http = new XMLHttpRequest();
    http.open('POST', messageEndpoint, true);
    http.setRequestHeader('Content-type', 'application/json');
    http.onreadystatechange = function() {
      if (http.readyState === XMLHttpRequest.DONE && http.status === 200 && http.responseText) {
        Api.setResponsePayload(http.responseText);
      } else if (http.readyState === XMLHttpRequest.DONE && http.status !== 200) {
        Api.setErrorPayload({
          'output': {
            'generic': [
              {
                'response_type': 'text',
                'text': 'Something went wrong.'
              }
            ],
          }
        });
      }
    };

    var params = JSON.stringify(payloadToWatson);
    // Stored in variable (publicly visible through Api.getRequestPayload)
    // to be used throughout the application
    if (Object.getOwnPropertyNames(payloadToWatson).length !== 0) {
      Api.setRequestPayload(params);
    }

    http.send(params);
  }
}());
上面的代码是由IBM提供的(用于我尝试使用的Watson Assistant),代码是用于Node.JS应用程序的,该应用程序运行良好。 它工作得很好,因为上面的代码只是通过index.html中的标记包含在应用程序中,瞧,它工作得很好,但我没有这个能力(请阅读下文)。 我的问题是,他们的应用程序也是一个客户端应用程序,我想将所有“后端”内容传输到我的RESTAPI,这就是为什么我尝试使用上面的代码

var Api = (function() {
  var messageEndpoint = "/api/message";

  // Publicly accessible methods defined
  return {
    messageEndpoint: messageEndpoint
  };
})();
module.exports = Api ;
你可以像这样使用它

const api = require("./api");
console.log(api);

所以基本上只需添加
module.exports=Api在api文件中,您将能够使用它。

您是否尝试使用“require(”./file\u name\u with\u property\u path');`?我这样做了,同样的类型错误告诉我其中一个函数不是函数:(可能是,您忘记了导出模块,如:
module.exports={您的js代码将导出到另一个.js文件}
?是的,就是这样,我试过了,但忽略了它,因为我没有定义,而且未定义是来自函数的返回,而不是Api对象本身,您的函数返回了正确的数据(我使用的服务有问题,而不是代码),谢谢!