Javascript Express,如何将变量从routes传递到客户端的JS文件

Javascript Express,如何将变量从routes传递到客户端的JS文件,javascript,node.js,express,Javascript,Node.js,Express,我有一个Express项目,它在一个单独的文件中包含客户端javascript,该文件生成一个图形。我试图将express路由中的变量传递给这个javascript文件,以便绘制图形。 我已经尝试了下面的代码,但我得到以下错误 错误:找不到模块“js” 我认为您可以查看和的Express文档 无法呈现JS文件 似乎您想为静态用户_chart.js提供 /* server.js */ app.set('view engine', 'ejs'); app.register('.html', requ

我有一个Express项目,它在一个单独的文件中包含客户端javascript,该文件生成一个图形。我试图将express路由中的变量传递给这个javascript文件,以便绘制图形。 我已经尝试了下面的代码,但我得到以下错误

错误:找不到模块“js”


我认为您可以查看和的Express文档

无法呈现JS文件

似乎您想为静态
用户_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">
/*server.js*/
应用程序集(“查看引擎”、“ejs”);
app.register('.html',require('ejs'));
//静态地为你的js服务
app.use('/js',path.join(_dirname,'../views/js/users_chart.js'))
app.get('/users',函数(req,res){
//将变量传递到html页面
res.render('users.html'{
“用户”:用户
});
});
//在users.html中

可能也会有帮助

我认为您可以查看和的Express文档

无法呈现JS文件

似乎您想为静态
用户_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">
/*server.js*/
应用程序集(“查看引擎”、“ejs”);
app.register('.html',require('ejs'));
//静态地为你的js服务
app.use('/js',path.join(_dirname,'../views/js/users_chart.js'))
app.get('/users',函数(req,res){
//将变量传递到html页面
res.render('users.html'{
“用户”:用户
});
});
//在users.html中

可能也很有帮助

在得到巨大帮助后,找到了解决方案

为了在客户端有一个javascript文件来接收来自路由的变量,我必须将JSON格式的变量从路由文件发送到客户端的javascript文件。我使用XMLHttpRequest来接收客户端javascript文件中的JSON

下面是用户的代码_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();

在得到巨大帮助后,找到了解决办法

为了在客户端有一个javascript文件来接收来自路由的变量,我必须将JSON格式的变量从路由文件发送到客户端的javascript文件。我使用XMLHttpRequest来接收客户端javascript文件中的JSON

下面是用户的代码_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();

你有一个
views/js/
文件夹吗?你不能对js文件使用
res.render()
res.render()
是与一个文件夹一起使用的。@Craicerjack是的,我有视图/js/folder你有
views/js/
文件夹吗?你不能对js文件使用
res.render()
res.render()
用于@Craicerjack yes I have views/js/文件夹
app.register
在最新版本的Express中不用于注册新的视图引擎。相反,使用
app.set('view engine',ejs);
将是一种方法,或者使用
app.engine('html',require('ejs').renderFile)指定新引擎;
。请参见。users\u图表不是静态的,我试图将users变量从路由传递给它,这就是问题的原因。@Ramez您是否阅读了答案的其余部分?从res.render(视图[,局部变量][,回调]提供的链接)呈现视图并将呈现的HTML字符串发送到客户端。
users\u chart
是静态的-静态文件通常是脚本、CSS文件、图像等文件。这些文件不是服务器生成的,但在请求时必须发送到浏览器。此回答只会导致错误用户未定义。我相信,因为它位于单独的j中avascript文件不在呈现的html中。
app.register
未在最新版本的Express中用于注册新的视图引擎。相反,使用
app.set('view engine',ejs);
将是一种方法,或使用
app.engine('html',require('ejs').renderFile)指定新引擎;
。请参见。users\u图表不是静态的,我试图将users变量从路由传递给它,这就是问题的原因。@Ramez您是否阅读了答案的其余部分?从res.render(视图[,局部变量][,回调]提供的链接)呈现视图并将呈现的HTML字符串发送到客户端。
users\u chart
是静态的-静态文件通常是脚本、CSS文件、图像等文件。这些文件不是服务器生成的,但在请求时必须发送到浏览器。此回答只会导致错误用户未定义。我相信,因为它位于单独的j中avascript文件不在呈现的html中。