2017-11-10 144 views
0

我正在使用Nodejs,expressjs,sqlite3。发送数据到前端expressjs

我已成功地从数据库和路由使用expressjs得到我的数据,这是所有在叫server.js

现在,我想送/使用我在前端提取的数据的js文件。

我想有一个全局变量,并使用在其他的js文件的全局变量,但没有奏效。经过一番研究,我大部分时间都看到AJAX。我是否需要使用AJAX将数据从后端发送到前端?

的想法是基于用户选择什么样的产品,更新的前端。我在服务器js中获取产品数据,我不知道如何将其发送到前端以填写表并根据数据库上的数据更改产品名称。

另外,我应该继续,看看是否保存/使用全局变量的作品我的数据? 谢谢。

回答

0

应该创建RESTful API中做你想做什么。这意味着你必须使用AJAX,并且你不能使用全局变量。

+0

感谢您的回答。有没有办法使用AJAX重定向页面?例如。当一个表格中的元素被点击时,转到不同的视图并根据该特定项目的数据(这是我的产品)修改元素/属性值。 – asker

+0

是的,假设你的网站是'www.yoursite.com',网页是'/ products',你可以从这个页面重定向到一个页面'/ product/id_product',其中'id_product'可以是你的主键在产品的sqlite3表中使用。 –

0

AJAX是请求从后端数据,而不触发重新加载整个页面的好方法。但是它增加了一层复杂性,它听起来不像你需要的。由于您使用的是快递,因此您可以访问templating engine开箱即可处理此问题。

快递响应对象有一个render方法,您可以指定要使用的模板,并将数据发送给模板。一些伪代码适用于您:

// server.js 
app.get('someroute',(req,res,next)=>{ 
    //get data from DB, returns promise 
    return db.getData().then((data)=>{ 
     return res.render('myTableTemplate',data); 
    }); 
}); 

在模板文件中,您将使用JSON数据适当地填充表。

如果使用一个客户端JS库(反应,VUE,角等)可以跳过res.render(...)和简单地res.json(data)

+0

我为我的意见使用html。如何选择要与我的数据映射哪个元素/属性?另外,如何更改视图以显示具体项目的详细信息?例如。当一个表格中的元素被点击时,转到不同的视图并根据该特定项目的数据(这是我的产品)修改元素/属性值。 – asker

+0

以下是我的: app.render(“/productDetail.html",rows,function(err,html){ console.log(rows); res.sendFile(path.join(__ dirname +'/ projectDetail。 html')); });假设我想要将产品名称映射到rows.productName。我该怎么做才能在主页中选择该产品时看到正确的产品名称。 //document.getElementById('pname')= rows.productName;例如 – asker

+0

将数据映射到表的语法高度依赖于您使用的模板引擎。这应该在你的路线之前定义。像'app.set('engine','ejs')'。您不在render函数回调中执行res.sendFile。渲染将根据数据创建html并发送给客户端。 – Splitty