Node.js 如何在节点中的另一个JS文件中加载JS文件
无法在我的应用程序中加载JS文件(未定义),我希望模拟与普通HTML中的标记相同的效果 我试过了 从‘/Api’->导入Api告诉我,定义的函数中没有一个是函数(没有任何循环依赖项),所以我最好猜测Api不是初始化的还是什么 已尝试Api上的module.exports->告诉我Api未定义 tested exports.Api->告诉我尝试从Api调用的函数不是函数 我试着去要求,还有一些我甚至记不起来的东西,但似乎都不起作用。主要的问题是,我不知道讨论中的JS文件的格式,因为我从未见过一个变量声明为包含其他函数的函数,所以对此的解释可能会很有用Node.js 如何在节点中的另一个JS文件中加载JS文件,node.js,Node.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对象本身,您的函数返回了正确的数据(我使用的服务有问题,而不是代码),谢谢!