In meiner Funktion "reqHandler" sammle ich Formulardaten und gebe sie in meine http.request. Um Anfragen zu ketten, habe ich einen Promise- und Then-Handler deklariert. Problem ist, dass: 1. Dies wird in die Konsole geschrieben "Unhandled Versprechen Ablehnung (Ablehnung ID: 2): TypeError: Kann Eigenschaft 'URL' von undefined" 2. Es scheint wie. Dann wird nicht aufgerufen, also keine API-Aufrufe werden hergestellt.Verketten von http-Anfragen mit Versprechen
Code:
"use strict";
const http = require("http");
const qs = require("querystring");
const fs = require("fs");
const PORT = 3000;
let resObject = {};
let hash = "";
const options = {
hostname: "netology.tomilomark.ru",
path: "/api/v1/hash",
method: "post"
};
const reqHandler = (req, res) => {
return new Promise((resolve, reject) => {
if (req.url === "/") {
switch (req.method.toLowerCase()) {
case "get":
// Browse my form with "Name" and "Surname" inputs
fs.readFile("./logs/form.html", (err, file) => {
if (err) {
reject("Promise rejected");
return
}
res.writeHead(200, {'Content-Type': 'text/html','Content-Length':file.length});
res.write(file);
res.end();
});
break;
case "post":
// Collect form data and parse it using querystring
let body = "";
req.setEncoding("utf8");
req.on("data", (data) => {
body += data;
if (body.length > 1e6)
req.connection.destroy();
});
req.on("end",() => {
let post = qs.parse(body);
console.log(post);
options.headers = {
"Content-Type": "application/json",
"firstname": `${post.firstName}`
};
options.body = {
"lastname": `${post.lastName}`
};
// Resolve with "options" object that has headers and body
resolve(options);
});
break;
default:
badRequest(res);
}
} else {
notFound(res);
}
});
};
reqHandler()
.then((options) => {
http.request(options, (res) => {
let resString = "";
res.on("data", (data) => {
resString += data;
});
res.on("end",() => {
console.log(resString);
});
res.end();
});
})
.catch(err => {throw err});
let badRequest = (res) => {
res.statusCode = 400;
res.setHeader('Content-Type', 'text/plain');
res.end('Bad Request');
};
let notFound = (res) => {
res.statusCode = 404;
res.setHeader('Content-Type', 'text/plain');
res.end('Not Found');
};
const server = http.createServer();
server.on("error", (err) => console.error(err));
server.on("request", reqHandler);
server.on("listening",() => console.log(`Start HTTP on port ${PORT}`));
server.listen(PORT);
Letztlich, was noch falsch mit meinem Versprechen und .then? Jede Hilfe wird geschätzt!
Was ist das Problem, das Sie sehen? Schnell vorschlagen. Sie können die 'request-promise'-Bibliothek verwenden, die ein Wrapper um das Anforderungsmodul – Rowland
ist Anstatt zu testen, ob (req.url ==="/")' und 'case" get "/ case" post "' sollten Sie implementieren ein Router ... 'app.get ("/"), app.post ("/")', solltest du nicht? –
'reqHandler()' erwartet zwei Parameter, aber Sie rufen sie ohne Argumente auf. – PeterMader