我正在尝试使用Google的示例代码:PhotoFrame。 它是使用node.js,expressjs,jQuery等构建的。 我需要传递一个变量-我们将其称为myString-从app.js传递至.js文件之一-我们将其称为myScript.js。 我已经尝试了至少12种在StackOverflow和其他地方发现的方法。没有一个起作用。
有些人说“即使使用'BAD',也要使用全局性。 在app.js中,您:
global.myStringGlobal = myString
在myScript中,您:
var myStringLocal = myStringGlobal;
不起作用:未定义myStringGlobal。
有些人说:在app.js中编码一个小对象,然后将其导出。 他们在myScript中需要它。不起作用:require在myScript中未定义。 实际上,由于myScript和myOtherScripts在浏览器中运行,因此需要 根本不可用。
有些人说在app.js中编写代码:
res.render(page, {myString: myString});
其他人则说:“不,这会将myString发送到html渲染器;而不发送给myString。 没错
我不会通过告诉我我徒劳尝试的其他方式来将其删除。
这个问题已经以各种方式多次提出和回答, 但所有答案都无效-不再吗?还是谁知道为什么?
所以我再问一次:有谁知道如何从node.js传递变量 将app.js脚本添加到某些myScript.js文件中?
答案 0 :(得分:0)
这是解释。
您必须知道自己已经参与了其他应用程序。您的express
应用是服务器端应用,而另一个将是客户端应用。因此,主要的问题是,如何将数据从服务器传递到客户端?
如果您正在考虑ajax
,那么您是对的。我不再使用jQuery
,但我认为您可以使用类似$.get(..)
的东西。
服务器
const express = require('express');
const app = express();
const port = 8080;
// Data can be requested via GET method
app.get('/sample-api', (req, res) => {
res.json({ text: 'Lorem Ipsum' });
}
// You can render page here...
app.listen(port, () => console.log(`Listening on port ${port}`);
客户
$(function() {
var msgFromServer;
$.get( "/sample-api", function( data ) {
msgFromServer = data.text;
alert( "Received data from server!" );
});
});
答案 1 :(得分:0)
在Expressjs中,您可以将变量与页面when you render it一起传递。在render调用中,您可以命名要尝试渲染的视图,并且可以将变量与之一起传递:
app.render('email', { name: 'Tobi' }, function(err, html){
// ...
});
这会将名为“ name”的变量传递给电子邮件视图,其值为“ Tobi”。然后,您可以在HTML中使用该变量
<script>var name = "<%= name %>";</script>