无法在我的应用程序中加载JS文件(得到未定义),并且我想模拟与纯HTML中的标记相同的效果。
我尝试过
从'./api'->导入Api告诉我,没有一个定义的函数是一个函数(没有任何循环依赖项),所以我最好的猜测是Api没有被初始化或什么?
在Api上尝试了module.exports->告诉我Api未定义
尝试了exports.Api->告诉我,我尝试从Api调用的函数不是函数
我试图要求一些其他事情,而我什至不记得了,这些似乎都不起作用。主要问题是我无法识别所涉及的JS文件的格式,因为我从未见过将变量声明为包含其他函数的函数,因此在tbh中可能会很方便地进行解释。
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和voila中的标签包含在应用程序中,因此它可以正常工作,但是我没有那种能力(请参阅下文)。
我的问题是他们的应用程序也是客户端应用程序,我想将所有这些“后端”内容都转移到我的REST API中,这就是为什么我尝试使用上面的代码。
答案 0 :(得分:1)
var Api = (function() {
var messageEndpoint = "/api/message";
// Publicly accessible methods defined
return {
messageEndpoint: messageEndpoint
};
})();
module.exports = Api ;
您可以像
一样使用它const api = require("./api");
console.log(api);
因此,基本上只需在api文件中添加module.exports = Api ;
,您就可以使用它。