MongoDB не показывает console.log при вставке документа из формы html ЛОКАЛЬНО - PullRequest
0 голосов
/ 02 августа 2020

Я пытался ввести текстовые данные в базу данных MongoDB, используя только форму HTML. Но когда я запустил его локально , он не работал. Я думаю, это как-то связано с созданием сервера Node.js. Но я не могу понять, как запустить файл HTML (здесь index.html). Я только научился запускать только код JavaScript в консоли Node. Я не знаю, как запустить этот индекс. html локально на NodeJS.

Также я хочу сделать это без использования ExpressJS! Все, что я нашел в Интернете, показало только, как это сделать, используя ExpressJS. Есть ли причина? Разве мы не можем сделать это, используя только NodeJS и MongoDB? ( ЛОКАЛЬНО на 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>

ОБНОВЛЕНИЕ: Также я пробовал вызвать это index.html с помощью Node. Используя следующий код.

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);
});

Но я не знаю, почему я не вижу console.log от MongoDB, в котором должно быть написано «1 документ добавлен!».

1 Ответ

0 голосов
/ 02 августа 2020

Everywhere использует ExpressJS для этой проблемы, потому что нам нужен веб-сервер, который может прослушивать вызовы из сети (локальные или внутренние rnet) и делать их понятными на стороне сервера. Вы запускали сервер http самостоятельно, но вам нужно обрабатывать запросы, поступающие из клиентской сети. В связи с вашей целью нам тоже понадобится express. Express также использует библиотеку http для создания веб-сервера, поэтому вам не нужно беспокоиться обо всем этом. Я не знаю вашей проблемы с express, но я предлагаю использовать express и его рекомендуемые подходы для решения этой проблемы.

Обновление

Этот топи c поможет вам создать веб-сервер только с Node.js: Node.js сервером, который принимает запросы POST

Создать файл с именем server.js и используйте приведенный выше ответ для создания http-сервера, а затем запустите его с терминала с помощью команды node app.js. (Убедитесь, что ваш терминал находится в правильном каталоге)

Поместите код, связанный с вашей базой данных, в тот раздел, который принимает запрос по методу POST.

Затем создайте файл javascript для вашего HTML и свяжите ее, как вы знаете, с <script src="">... и просто используйте fetch API для отправки запроса на только что запущенный http-сервер. Про fetch читайте здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...