繁体   English   中英

如何使用Node.js服务HTML页面,然后将数据写入JSON文件

[英]How to use Node.js to serve an HTML page which then writes data to a JSON file

我是NodeJS的菜鸟,我正努力了解NodeJS,HTML和JavaScript的交互方式...

我有一个使用NodeJS投放的HTML文件。 在HTML中,有一堆JavaScript代码吸收用户输入并组装一个对象。 现在,我想将此对象写入JSON文件。

以下是简化的HTML:

<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>MetaFlex</title>

    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"></script>

    <style>...
    </style>
</head>
<body>
    <div id="wholePage" class="container-fluid">...
    </div>

    <script>
        // global dictionary object
        let dictionaryObject = [];

        $(document).ready(function () {

        ... get user input, do some stuff, add results to dictionaryObject ...

            // write the dictionary to a JSON file
            writeDictionary();
    });

        // write object to JSON file
        function writeDictionary() {
            var fs = require("fs");

            fs.writeFile("./dictionaryObject.json", JSON.stringify(dictionaryObject, null, 4), (err) => {
                if (err) {
                    console.error(err);
                    return;
                };
                console.log("File has been created");
            });
        }
    </script>
    </body>
</html>

...这是服务器代码(app.js):

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

http.createServer(function (req, res) {
var q = url.parse(req.url, true);
var filename = "." + q.pathname;
fs.readFile(filename, function(err, data) {
    if (err) {
    res.writeHead(404, {'Content-Type': 'text/html'});
    return res.end("404 Not Found");
    }  
    res.writeHead(200, {'Content-Type': 'text/html'});
    res.write(data);
    return res.end();
});
}).listen(8080);

我通过以下方式提供HTML:

  1. 使用命令行启动服务器:node app
  2. 加载页面: http:// localhost:8080 / metaFlex.html

显示页面后,我可以输入写入DictionaryObject的数据。

但是,当JS进入“ require”功能时,我得到以下信息:

Uncaught ReferenceError: require is not defined
at writeDictionary (metaFlex.html:1286)
at HTMLButtonElement.<anonymous> (metaFlex.html:1220)
at HTMLButtonElement.dispatch (jquery.min.js:2)
at HTMLButtonElement.y.handle (jquery.min.js:2)

我觉得我必须缺少一些关键的难题。...我是否缺少HTML顶部的包含项? 是否需要将HTML文件拆分为HTML和JS组件? 我应该放弃疯狂的JSON梦想,写一个普通的本地文本文件吗? 你不能教老狗新的花招吗? 叹息

您的爱和指导将我带回到道路上,将不胜感激!

您可以在服务器端使用带有nodejs的json,而不是在客户端中编写代码,而可以使用AJAX添加术语,您需要在服务器中使用路由,而不仅仅是像这样提供html,如果字典对于所有人都通用如果每个客户端都有特定的词典,将是最佳解决方案的客户端,您可以为每个文件添加一个标识符(Dictionnary)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM