Problem: Ich kann den ColdFusion-REST-Dienst nicht dazu veranlassen, eine Datenquelle zu erstellen, indem eine Anforderung von Node.js gesendet wird. Jedes Mal, wenn ich versuche, Daten von Node.js an meinen ColdFusion-Wiederherstellungsdienst zu senden, ist mein Argumentwert leer.Daten von node.js an einen Coldfusion-Ruhedienst senden
-Code für Daten von Node.js Entsendung
var http = require('http'),
postData = {
name: "ab"
},
postData = JSON.stringify(postData),
htOptions = {
hostname: 'localhost',
port: 8500,
path: "/rest/createdsn/dsnComponent/createDataSource",
method: "POST",
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'Content-Length': Buffer.byteLength(postdata)
}
}
var req = http.request(htOptions);
console.log(postData) // {"name":"ab"}
req.write(postData);
req.end();
req.on('response', (res) => {
console.log(`STATUS: ${res.statusCode}`);
console.log(`HEADERS: ${JSON.stringify(res.headers)}`);
res.setEncoding('utf8');
res.on('data', (chunk) => {
console.log(`BODY: ${chunk}`);
});
res.on('end',() => {
console.log('No more data in response.')
})
console.log('api successfully called');
});
-Code für Coldfusion-REST-Service
<cfcomponent rest="true" restPath="/dsnComponent">
<cffunction name="createDataSource" access="remote"
returnType="any" httpMethod="POST" restpath="{strDSN}" produces="application/JSON">
<cfargument name="strDSN" default="" type="any" restargsource="form">
<cfdump var = #strDSN# format="html" output="D:\api.html">
<cfset reqDSN = deserializeJSON(strDSN)>
<cfset structDSN = structNew() >
<cfset structDSN.driver = "MSSQLServer" >
<cfset structDSN.name = reqDSN.name >
<cfset structDSN.host = "localhost" >
<cfset structDSN.port = "1433" >
<cfset structDSN.database = reqDSN.name>
<cfset structDSN.username = "sa" >
<cfset structDSN.password = "*****" >
<cfscript>
adminObj = createObject("component","cfide.adminapi.administrator");
adminObj = adminObj.login('***','admin');
myObj = createObject("component","cfide.adminapi.datasource");
myObj.setMSSQL(argumentCollection = structDSN);
structDSN.success = myObj.verifyDSN(dsn = structDSN.name, returnMsgOnError = 'true');
</cfscript>
<cfset res = serializeJSON(structDSN) />
<cfreturn structDSN>
</cffunction>
</cfcomponent>
Wenn ich versuche, einschließlich headers
Option in Variable htOptions
ich die folgende Fehlermeldung erhalten
Wenn ich Header nicht enthalten, erhalte ich eine leere Zeichenfolge in meine Argumente und erhält einen Fehler
{"Message":"JSON parsing failure: Unexpected end of JSON string"}
ich eine cfm Seite erstellt den Rest Dienst rufen und es erfolgreich erstellt die Datenquelle in Coldfusion Administrator
-Code
<cfset structDSN.name = "ab">
<cfset strDSN = serializeJSON(structDSN)>
<cfhttp url="http://localhost:8500/rest/createdsn/dsnComponent/createDataSource" method="post" port="8500" result="res">
<cfhttpparam name="strDSN" value="#strDSN#" type="formfield" />
</cfhttp>
Ich kann nicht herausfinden, was ich falsch mache.
Welche Zeile von Ihnen node.js Code soll das Argument liefern? –
Ihr CF-Post-Beispiel enthält keine Kopfzeile richtig? –
Wenn Sie den Fehler 500 erhalten, wird irgendetwas in api.html angezeigt? –