我有一个Express项目,它在一个生成图形的单独文件中有客户端javascript。我试图将变量从快速路由传递到此javascript文件,以便绘制图形。 我已经尝试了下面的代码,但我收到了以下错误。
错误:找不到模块'js'
app.get('/users', function(req, res) {
res.render(path.join(__dirname, '../views/js/users_chart.js'), {
'users': users
});
});
答案 0 :(得分:0)
我认为您查看res.render和serving static files
的Express文档会对您有所帮助您无法呈现JS文件。
您似乎希望使用
提供静态user_chart.js
/* server.js */
app.set('view engine', 'ejs');
app.register('.html', require('ejs'));
// serve your js statically
app.use('/js', path.join(__dirname, '../views/js/users_chart.js')
app.get('/users', function(req, res) {
// pass variable to html page
res.render('users.html', {
'users': users
});
});
// in users.html
<script type="text/javascript" src="/js/users_chart.js">
This post也可能有用
答案 1 :(得分:0)
在得到很大帮助后,找到了解决方案。
为了在客户端有一个javascript文件,它将从路由接收变量,我必须将JSON中的变量从routes文件发送到客户端的javascript文件。我使用XMLHttpRequest以便在客户端的javascript文件中接收JSON。
Bellow是users_graph.js的代码,它是客户端javascript文件。
var xmlhttp = new XMLHttpRequest();
var url = "/users";
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
var users = JSON.parse(xmlhttp.responseText).users;
// do something with the users variable that was passed by the routes
}
};
xmlhttp.open("GET", url, true);
xmlhttp.setRequestHeader('Accept', 'application/json');
xmlhttp.send();