如何从Node.js传递变量到前端JS

3
我正在尝试从我的NodeJS后端向JS脚本传递变量,但迄今为止没有成功。 后端代码大致如下:
app.js
const express = require('express');
const app = express();
const path = require('path');
const bodyParser = require('body-parser');
const cookieParser = require('cookie-parser');

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended:true}));


port = process.env.PORT || 3000;
app.listen(port);
app.use(express.static(__dirname + '/'));

app.engine('ejs', require('ejs').renderFile);
app.use(cookieParser());

...
var Orders = (...);
app.get('/', (req,res,next) => {
        res.render("main", {Orders: Orders});
    
    });

此处的Orders是一个包含多维MySQL数据的数组。

在前端,我尝试了不同的AJAX调用,但app.js中的变量没有被保存。它们确实通过main.ejs文件传递了。

欢迎提供建议,这是我的第一个NodeJS项目 :)

编辑:以下是与数据库相关的代码(它可以工作):

const mysql = require('mysql');
var con = mysql.createConnection({
    host: 'localhost',
    user: 'root',
    password: '12345678',
    database: 'DBName'
    });
    
    con.connect(function(err) {
    if (err) 
    {console.log("error");
    throw err;}
    console.log("Connected!");
    });
 // Get earlier orders for that store
    con.query("SELECT employee_id, datum, time_hour, time_minute, duration, treatment FROM orders WHERE  store_id = *store_id*", function (err, result, fields) {
    if (err){throw err};
    Orders = result;
    });

这个回答解决了你的问题吗?如何从Node.js传递变量到HTML页面? - Marik Ishtar
你能展示数据库查询和连接配置吗? - Pavlos Karalis
2个回答

2

在Node.js中:

app.get('/', (req,res,next) => {
    res.render("main", {Orders: Orders});
});

在EJS中:
<script type='text/javascript'>
    var orders = <%-JSON.stringify(Orders)%>
</script>

1

谢谢!当我将它放在ejs文件的底部时,确实可以工作,但是当我尝试将代码添加到外部js文件时,它就无法工作。而且,在ejs文件中放置此代码仍然无法使它们在js文件中可用。 - Ole Hylland Spjeldnæs
我猜一个解决方案就是将所有前端js添加到ejs文件中,而不是单独的文件。有点凌乱,但无所谓。 - Ole Hylland Spjeldnæs
1
是的,这可能会变得混乱。这是否意味着你的外部js文件被包含在这个页面的顶部,即在这个script标记之前?我想相信'var'应该在全局上下文中定义此值。尝试使用'window.Orders'而不是'var',我怀疑没有任何区别。 - Kingsley Solomon
相对文件的相对位置不会影响任何东西。谢谢,我回到电脑上时会尝试它! - Ole Hylland Spjeldnæs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接