Javascript ReferenceError:$http未定义
我试图通过node.js进行SOAP调用,并得到以下错误:Javascript ReferenceError:$http未定义,javascript,node.js,Javascript,Node.js,我试图通过node.js进行SOAP调用,并得到以下错误: ReferenceError: $http is not defined 这是我的代码,在最后一行出现故障之前,其他一切都正常工作: //Import the `assert` module to validate results. var assert = require('assert'); var SoapRequestXML='<soapenv:Envelope xmlns:soapenv="http://schemas
ReferenceError: $http is not defined
这是我的代码,在最后一行出现故障之前,其他一切都正常工作:
//Import the `assert` module to validate results.
var assert = require('assert');
var SoapRequestXML='<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:_5="https://clients.mindbodyonline.com/api/0_5">\r\n' +
'<soapenv:Header/>\r\n' +
'<soapenv:Body>\r\n' +
'<_5:GetClasses>\r\n' +
'<_5:Request>\r\n' +
'<_5:SourceCredentials>\r\n' +
'<_5:SourceName>SOURCECREDENTIALS</_5:SourceName>\r\n' +
'<_5:Password>PASSWORD</_5:Password>\r\n' +
'<_5:SiteIDs>\r\n' +
'<_5:int>-99</_5:int>\r\n' +
'</_5:SiteIDs>\r\n' +
'</_5:SourceCredentials>\r\n' +
'</_5:Request>\r\n' +
'</_5:GetClasses>\r\n' +
'</soapenv:Body>\r\n' +
'</soap:Envelope>';
var options = {
//Define endpoint URL.
url: "https://api.mindbodyonline.com/0_5/ClassService.asmx",
//Define body of POST request.
body: SoapRequestXML,
//Define insert key and expected data type.
headers: {
'POST': 'https://api.mindbodyonline.com/0_5/ClassService.asmx?wsdl HTTP/1.1',
'Accept-Encoding': 'gzip,deflate',
'Content-Type': 'text/xml;charset=UTF-8',
'SOAPAction': '"http://clients.mindbodyonline.com/api/0_5/GetClasses"',
'Content-Length': '594',
'Host': 'api.mindbodyonline.com',
'Connection': 'Keep-Alive',
'User-Agent': 'Apache-HttpClient/4.1.1 (java 1.5)'
}
};
//Define expected results using callback function.
function callback(error, response, body) {
//Log status code to Synthetics console.
console.log(response);
//Verify endpoint returns 200 (OK) response code.
assert.ok(response.statusCode == 200, 'Expected 200 OK response');
//Parse JSON received from Insights into variable.
//
var parseString = require('xml2js').parseString;
var XMLReSULT = response.body;
parseString(XMLReSULT, function (err, result) {
console.dir(result);
});
//Log end of script.
console.log("End reached");
}
//Make GET request, passing in options and callback.
$http.post(options, callback);
//导入'assert'模块以验证结果。
var assert=require('assert');
var SoapRequestXML='\r\n'+
“\r\n”+
“\r\n”+
“\r\n”+
“\r\n”+
“\r\n”+
'源凭据\r\n'+
'密码\r\n'+
“\r\n”+
“-99\r\n”+
“\r\n”+
“\r\n”+
“\r\n”+
“\r\n”+
“\r\n”+
'';
变量选项={
//定义端点URL。
url:“https://api.mindbodyonline.com/0_5/ClassService.asmx",
//定义POST请求的主体。
正文:SoapRequestXML,
//定义插入键和预期的数据类型。
标题:{
"POST":"https://api.mindbodyonline.com/0_5/ClassService.asmx?wsdl HTTP/1.1',
“接受编码”:“gzip,deflate”,
“内容类型”:“text/xml;charset=UTF-8”,
“SOAPAction”:”http://clients.mindbodyonline.com/api/0_5/GetClasses"',
“内容长度”:“594”,
“主机”:“api.mindbodyonline.com”,
“连接”:“保持活动状态”,
“用户代理”:“Apache HttpClient/4.1.1(java 1.5)”
}
};
//使用回调函数定义预期结果。
函数回调(错误、响应、正文){
//将状态代码记录到综合控制台。
控制台日志(响应);
//验证端点是否返回200(正常)响应代码。
assert.ok(response.statusCode==200,“预期200个ok响应”);
//将从Insights接收的JSON解析为变量。
//
var parseString=require('xml2js')。parseString;
var XMLReSULT=response.body;
parseString(XMLReSULT,函数(err,result){
console.dir(结果);
});
//日志结束脚本。
控制台日志(“到达终点”);
}
//发出GET请求,传入选项并回调。
$http.post(选项、回调);
非常感谢您的帮助,我对这一点很陌生 与前面的注释一样,
$http
没有定义,您不能使用var$http=require('http')
,因为节点http
没有post方法。您需要进行一些重构。我想你在找这样的东西
var assert = require('assert')
var http = require('http')
var parseString = require('xml2js').parseString;
var SoapRequestXML='<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:_5="https://clients.mindbodyonline.com/api/0_5">\r\n' +
'<soapenv:Header/>\r\n' +
'<soapenv:Body>\r\n' +
'<_5:GetClasses>\r\n' +
'<_5:Request>\r\n' +
'<_5:SourceCredentials>\r\n' +
'<_5:SourceName>SOURCECREDENTIALS</_5:SourceName>\r\n' +
'<_5:Password>PASSWORD</_5:Password>\r\n' +
'<_5:SiteIDs>\r\n' +
'<_5:int>-99</_5:int>\r\n' +
'</_5:SiteIDs>\r\n' +
'</_5:SourceCredentials>\r\n' +
'</_5:Request>\r\n' +
'</_5:GetClasses>\r\n' +
'</soapenv:Body>\r\n' +
'</soap:Envelope>';
var options = {
hostname: 'api.mindbodyonline.com',
port: 80,
path: '/0_5/ClassService.asmx',
method: 'POST',
headers: {
'Accept-Encoding': 'gzip,deflate',
'Content-Type': 'text/xml;charset=UTF-8',
'SOAPAction': '"http://clients.mindbodyonline.com/api/0_5/GetClasses"',
'Content-Length': '594',
'Connection': 'Keep-Alive',
'User-Agent': 'Apache-HttpClient/4.1.1 (java 1.5)'
}
}
var req = http.request(options, (res) => {
var data;
res.setEncoding('utf8');
res.on('data', (chunk) => {
data += chunk;
});
res.on('end', () => {
parseString(data, function(err, result) {
console.log(result);
});
console.log('End reached')
});
});
req.on('error', (e) => {
console.log(`problem with request: ${e.message}`);
});
req.write(SoapRequestXML);
req.end();
var assert=require('assert'))
var http=require('http')
var parseString=require('xml2js')。parseString;
var SoapRequestXML='\r\n'+
“\r\n”+
“\r\n”+
“\r\n”+
“\r\n”+
“\r\n”+
'源凭据\r\n'+
'密码\r\n'+
“\r\n”+
“-99\r\n”+
“\r\n”+
“\r\n”+
“\r\n”+
“\r\n”+
“\r\n”+
'';
变量选项={
主机名:“api.mindbodyonline.com”,
港口:80,
路径:'/0_5/ClassService.asmx',
方法:“POST”,
标题:{
“接受编码”:“gzip,deflate”,
“内容类型”:“text/xml;charset=UTF-8”,
“SOAPAction”:”http://clients.mindbodyonline.com/api/0_5/GetClasses"',
“内容长度”:“594”,
“连接”:“保持活动状态”,
“用户代理”:“Apache HttpClient/4.1.1(java 1.5)”
}
}
var req=http.request(选项,(res)=>{
var数据;
res.setEncoding('utf8');
res.on('数据',(块)=>{
数据+=块;
});
res.on('结束',()=>{
parseString(数据、函数(错误、结果){
控制台日志(结果);
});
console.log('End reated')
});
});
请求开启('错误',(e)=>{
log(`problemwithrequest:${e.message}`);
});
请求写入(SoapRequestXML);
请求结束();
在使用模块之前,您是否导入了http
模块let$http=require('http')代码>?显示的任何内容都无法说明其原因defined@Sushanth--将该评论提升为答案。OP显然包含了他的每一行代码,包括其他requires
,而必要的代码不在其中。看起来你几乎在尝试使用angular的“$http”服务。NodeJS的“http”模块比您正在尝试的要低一点。在完善您的问题之前,您可能想先尝试“请求”npm包:谢谢。我错过了'var http=require('http'),在这里找到了它。