如何使用 JavaScript 正确编码服务器端和客户端之间的交换数据?

How to correctly code an interchange data between server-side and client-side using JavaScript?

我在 Web 应用程序上工作,需要将 editable tables 合并到 HTML 页面中。找到了很棒的 JS 工具“Tabulator”,然而,我缺乏在服务器与客户端之间来回传输数据方面的基本知识。好了,进入正题。
在服务器端:

在客户端:

===阶段1.从服务器向客户端发送数据===

第 1 步。app.js 从 Mongo 数据库中提取数据并将其发送到 table.js

//=== render stat.html page ===//
router.get('/stat', (req,res)=>{
    res.render('stat');
});

//=== pull user data from mongo and send it to table.js ===//
router.get('/stat', (req,res) => {
    User.find({}, (err, users) => {
        if (err) throw err;
        res.send(users);
    });
});

//=== pull resource data from mongoand send it to table.js ===//
router.get('/stat', (req,res) => {
    Resource.find({}, (err, resources) => {
        if (err) throw err;
        res.send(resources);
    });
});

这里我有几个问题:

  1. 问题 #1。我做对了吗?
  2. 问题 #2。是否可以在一个路由中渲染页面并向客户端 JS 发送数据?我试过了,但出现错误。
  3. 问题#3。 mongoose Collection.find 的输出采用 JSON 格式,这正是 Tabulator 所需要的。在将它发送到客户端之前,我是否需要以任何方式对其进行操作?例如使用 JSON.stringify
  4. 问题 #4。有什么方法可以检查数据是否真的在发送?
  5. 问题 #5。我需要为不同的 table 发送两个不同的 JSON。如果它们通过一条路线发送,如何在客户端将一条路线与另一条路线分开?我正在考虑使用不同的路径,例如 /stat/user/stat/resource 但是如何触发它们?

第 2 步。在客户端 table.js 文件接收数据并将其提供给 Tabulator tables。 Tabulator 有自己的选项来请求远程数据 ajaxURL

//setup user table
var table = new Tabulator('#user-table',{
    ajaxURL:"stat/user",
});

//setup resource table
var table = new Tabulator('#resource-table',{
    ajaxURL:"stat/resource",
});

问题:

  1. 问题#6。由于页面上有两个 table,我需要使用两个不同的 URL。这又回到了问题#5。如何在渲染页面时触发这些路径
  2. 问题#7。假设没有 ajaxURL 如何读取 table.js 中的数据?我试过 Fetch API 但没有成功。

table.js

中的获取请求
fetch('/stat/user', {
    headers: {
        'Content-Type': 'application/json'
    },
    body: JSON.stringify(users)
})
.then(response => response.json())
.then(function(response) {
    if (response.ok) {
        console.log('got data: ', response.users);
    }
    throw new Error('Request failed.');
})
.catch(function(error) {
    console.log(error);
});

第 2 阶段旨在将数据从客户端发送回服务器。但我认为这已经是压倒性的了,也许这部分最好暂时搁置。
我知道互联网上有很多文章,Whosebug 中有关于这个主题的问题,并且阅读了很多但仍然没有掌握,所以请不要推荐 MDN 手册之类的东西。
我将非常感谢任何帮助。

自己整理的。特别感谢@jonrsharpe。
如果有人需要这方面的帮助,我很乐意提供帮助。