Próbowałem wprowadzić dane tekstowe do bazy danych mongodb przy użyciu tylko formularza HTML. Ale kiedy przejechałem go lokalnie , nie działa. Myślę, że miałem coś wspólnego z tworzeniem serwera Node.js. Ale nie mogę wymyślić, jak uruchomić plik HTML (tutaj jest index.html). Nauczyłem się tylko uruchomić tylko kod JavaScript w konsoli węzła. Nie wiem, jak mogę uruchomić ten index.html lokalnie na Nodejs.

Również chcę to zrobić bez korzystania z ekspresji! Wszystko, co znalazłem online pokazane tylko na tym, jak to zrobić za pomocą Expressjs. Czy jest z tego powodu? Czy nie możemy tego zrobić za pomocą tylko Nodejs i MongoDB? ( lokalnie na systemie Windows )

var MongoClient = require("mongodb").MongoClient;
var url = "mongodb://localhost:27017";

function addData(){
    var record = document.getElementById("title").value;
    MongoClient.connect(url, function (err, db) {
        if (err) throw err;
        var dbo = db.db("notetest");
        var record2value = { title: record };
        dbo.collection("page1").insertOne(record2value, function (err, res) {
            if (err) throw err;
            console.log("1 document added!");
            db.close();
        })
    })
};

<!DOCTYPE html>
<html>
<head>
    <title>test</title>
    <script type="text/javascript" src="scripts/script.js"></script>
</head>
<body>
    <form onsubmit="addData()">
        <input type="text" name="title" id="title">
        <input type="submit" name="submit" id="submit">
    </form>
</body>
</html>

Aktualizacja: Próbowałem zadzwonić do tego index.html za pomocą węzła. Korzystając z poniższego kodu.

var http = require('http');
var fs = require('fs');

const PORT=8080; 

fs.readFile('./index.html', function (err, html) {

    if (err) throw err;    

    http.createServer(function(request, response) {  
        response.writeHeader(200, {"Content-Type": "text/html"});  
        response.write(html);  
        response.end();  
    }).listen(PORT);
});

Ale nie wiem, dlaczego nie widzę console.log z MongoDB, który powinien powiedzieć "1 dodany dokument!".

0
Remix Protocol 2 sierpień 2020, 15:59

1 odpowiedź

Najlepsza odpowiedź

Wszędzie używa ExpressJs dla tego problemu, ponieważ potrzebujemy serwera internetowego, który może słuchać połączeń z sieci (lokalnego lub Internetu) i sprawić, że jest zrozumiała w boku serwera. Sam serwer http na własną rękę, ale musisz obsługiwać żądanie, które pochodzą z Clientide Web. Ze względu na swój cel, potrzebujemy również ekspresu. Ekspresowe również korzysta z biblioteki http do tworzenia serwera WWW, aby nie musisz się martwić o całe rzeczy. Nie znam twojego problemu z Express, ale proponuję używanie Express i jego zalecane podejścia do rozwiązania tego problemu.


Aktualizacja

Ten temat pomoże Ci na tworzeniu serwera WWW tylko z węzłem. Node.js Server, który akceptuje żądania post

Utwórz plik o nazwie server.js i użyj powyższej odpowiedzi, aby utworzyć serwer HTTP, a następnie uruchom go z polecenia node app.js. (Upewnij się, że twój terminal jest w odpowiednim katalogu)

Umieść kod związany z bazy danych w tej sekcji, który akceptuje żądanie w metodzie POST.

Następnie utworzyć plik JavaScript dla swojej strony HTML i połącz go, jak wiesz za pomocą <script src="">... i po prostu użyj fetch API do wysyłania żądania serwera HTTP, który po prostu uruchomiłeś. Przeczytaj o fetch Oto.

0
Alireza Kiani 2 sierpień 2020, 15:02