【问题标题】:How to pass data from one page to another by onclick with node.js and express?如何通过使用 node.js 和 express 的 onclick 将数据从一个页面传递到另一个页面?
【发布时间】:2021-04-22 07:20:57
【问题描述】:

app.js

const database = new Datastore('database.db');
database.loadDatabase();

app.get('/api', (request, response) => {
    database.find({},(err,data)=> {
        if(err){
            response.end();
            return;
        }
        response.json(data)
    });
});

app.post('/api', (request, response) => {
    const data = request.body;
    database.insert(data);
    response.json(data);
});

page1.js

function TableRow() {
    let items = '1'
    let domore = '2'
    let cells = document.querySelectorAll('#recieve-info td');
    cells.forEach(cell => cell.onclick = async function () {
        let prevcell = cell.previousElementSibling;
        if (prevcell) {
            let data = {items, domore}
            let options = {
                method: 'POST',
                headers: {
                    'Content-Type': 'application/json'
                },
                body:JSON.stringify(data)
            };

            const response = await fetch('/api',options);
            const json = await response.json();
            console.log(json);
    }
    });
}

我正在尝试通过 onclick 将数据从一个页面传递到另一个页面,就像我单击第一个“Save1”一样,我只想在第一个页面中保存数据。但现在这三个数据都在保存

page2.js

async function ParaG() {
  const response = await fetch('/api');
  const data = await response.json();
  console.log(data);

  for(item of data){
    const para = document.querySelector('.Second-Para');
    para.textContent += `${item.items}, ${item.domore}`
  }

}

我为每个按钮创建了一个弹出模式,比如当我单击第一个按钮时,我希望获得已保存在该按钮中的数据。

对不起我的英语,我试图解释我能做什么

【问题讨论】:

  • 让我看看我是否理解,您有一个项目,您尝试将其保存在特定列表中,但它却保存在所有列表中?
  • @EduardoFelipe 是的,它可以节省所有这些
  • 你的 api/backend 的路由是什么?只是 /api 还是其他的?
  • @EduardoFelipe Just /api

标签: javascript node.js fetch nedb


【解决方案1】:

我知道最终目标是将项目存储在特定列表中,然后能够从选定列表中检索项目。

在我看来,有些信息缺失,但我会尝试假设其中一些

后端

数据库

从后端寻找解决问题,我们可以看到实现 最终目标,您需要在数据库中至少有两个实体:

  1. 列表
  2. 项目

例如,包含以 主键和唯一键 作为 ID 的列。

并且项目实体应该包含一个列引用(FK)到列表实体作为“list_id”

因为没有关于实体的信息,我假设你的数据库有它

因此我不知道它们之间的关系,所以我假设是一个简单的一对多(一个包含各种项目的列表和一个列表中的一个项目)

路线

现在要将这个数据库与你的前端链接起来,你需要一些路由。

正如您所写,只有一个名为 /api,这不是一个好习惯,但您可以通过将参数添加到路由作为 /api/:item_id/:list_id 来使用它,然后检索项目,然后添加 list_id进入它。

更好的方法是为每个实体设置不同的路由,例如:

  1. /api/list

在这个路由中当你发送 POST 请求时,它应该能够创建一个新的列表。 如果你发送一个 GET 请求,它应该能够给你所有的列表

  1. /api/list/:list_id

在此路由中,当您发送 POST 请求时,它应该能够通过在数据库中查找 id 来显示您的特定列表,您在 url 参数中接收到的 id 作为 list_id

  1. /api/项目

在这个路由中,当你发送 POST 请求时,它应该能够创建一个新项目。 如果你发送一个GET请求,它应该能够给你所有的itens

  1. /api/item/:item_id/:list_id

在这个路由中,当你发送 POST 请求时,它应该能够创建一个新的 item-list 关系,你可以通过 params 上的 id 获取 item,然后将 list_id 添加到它。

  1. /api/item/:list_id

在此路由中,当您发送 GET 请求时,它应该从应用程序数据库中检索与列 list_id 的值与 params 上的值相同的所有项

前端 前端可以基于路由构建,每当我们需要创建列表或项目时,我们可以向路由 1 或 2 发送 POST 请求,以及在需要接收项目和列表时,我们向它们发送 GET太

现在,当我们想向列表中添加一个项目时,向 4 发送一个 POST 请求,在参数上传递项目 id 和列表 id 应该可以解决问题。

要在 2 上获取特定列表的 GET 请求,传递 list_id 应该可以解决

最后,要从特定列表中获取所有项目,请在 5 上请求 GET,并传递您希望项目解决的列表的 id。

为了让您的生活更轻松,并从 SO 上帮助您的人那里,我推荐您 READ THIS,帮助您了解如何提出更好的问题

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-08
    • 1970-01-01
    • 1970-01-01
    • 2020-11-20
    • 2015-09-12
    • 1970-01-01
    • 2012-01-03
    相关资源
    最近更新 更多