在Express响应中使用Javascript函数发送数据
我想从我的Express服务器发送一个应用程序/ JavaScript响应,传递我从MongoDB获得的数据。
这是对在第三方网站中加载某些内容的呼吁的回应。
我已经创建了过程的所有不同部分,现在只需要将数据传递到Javascript响应中即可。
server.js
app.get('/', (req, res) => {
productInfo(param1, param2, res)
}
productInfo.js-MongoDB调用
function productInfo(param1, param2, res){
Product.find({key1: param1}, (err, docs) => {
let idList = docs.idList;
res.set('Content-Type', 'application/javascript');
res.sendFile(__dirname + '/script.js', (err) => {
if (err) { console.log(err) }
else { console.log('file sent') }
});
}
module.exports = productInfo;
script.js-发送自执行的匿名函数
(function(){
// function - load jQuery & Bootstrap in 3rd party website
$masterDiv = $(`
<div>
...
... *data required*
</div>
`)
$('body').append($masterDiv);
// function - jquery event handlers where *data is required*
})();
当第三方网站页面上发生某些事件时,事件处理程序将更新正确的数据(id)。
如何将数据(idList)传递给script.js?
如果我在(function(){})()之前设置了虚拟全局变量数据,在script.js中插入一行,然后我就可以在函数中访问它。
我尝试使用res.render,但显示“找不到模块'js'”。
res.render(__dirname + '/scriptproduct.js', (err) => {});
我能以某种方式为script.js函数设置参数并使用res.send(functionName(idList))调用该函数吗?
[我已经看到了使用res.render在html视图中发送模板的答案,但是在JS和HTML都需要数据的情况下,如何使用这种解决方案?
我还有许多其他路线未使用模板引擎。如果可以的话,我可以仅将其用于一条路线吗?
我对这一切非常陌生,基本上是在寻求解决方案。因此,我上面的一些问题可能是基本问题。
回答如下:使用ejs,您可以将字符串传递到EJS模板或.js文件。但是,您只能传递字符串。您可以做的是使用JSON.stringify(obj)将对象作为字符串传递,然后使用JSON.parse(obj)将其转换回。
这里是另一个有一些代码并且可能会有所帮助的答案:How to include external .js file to ejs Node template page