我正在尝试构建node.js + express
应用程序,它消耗SQL服务器数据库中的数据。但我在executeStatement()
路由器功能范围内得到app.get()
的响应时遇到问题。我希望我的代码能够呈现一个数组对象,我可以在我的ejs
模板或视图中使用它。如下面的代码所示,column.value
是我想在前端使用的主要对象数组。
PS:我对编程世界还很陌生。谢谢你的帮助!
var express = require('express');
var tediousExpress = require('express4-tedious');
var app = express();
var Connection = require('tedious').Connection;
var Request = require('tedious').Request;
app.set('view engine', 'ejs')
app.set('views', './views')
var config = { 'contains my credentials' }
var connection = new Connection(config);
app.use(function (req, res, next) {
req.sql = tediousExpress(connection);
next();
});
app.get('/products', function (req, res ) {
/* I want to get column.value object to be rendered to my frontend
I already used res.json() here but it returns nothing*/
function executeStatement() {
request = new Request("select count * from table where ArticleId=
24588 for json path", function(err, data) {
if (err) {
console.log(err);
} else {
console.log('total rows fetched ') ;
}
connection.close();
});
request.on('row', function(columns) {
columns.forEach(function(column) {
if (column.value === null) {
console.log('NULL');
} else {
column.value ;
}
});
});
connection.execSql(request) ;
}
});
您需要在回调中渲染row
事件:
app.get('/products', function (req, res ) {
// assuming you get the datas in column.value
request = new Request("select count * from table where ArticleId=24588 for json path", function(err, rowCount) {
if (err) {
console.log(err);
} else {
console.log('total rows fetched ') ;
}
connection.close();
}
request.on('row', function(columns) {
const datas = []; // <-- array to hold values
columns.forEach(function(column) {
if (column.value === null) {
console.log('NULL');
} else {
datas.push(column.value);
}
});
res.render('myView', { datas })
});
connection.execSql(request);
}
在您的view
,您可以访问datas
,如:
<% datas.forEach(value => { %>
// do something like
// <p><%= value %></p>
<% }) %>
您没有渲染任何数据传递给前端,也没有从函数返回数组。
为了消除你的逻辑,你应该有这样的事情:
app.get('/products', function(err, data) {
res.render('products', { arrData: executeStatement() }, function(err, data) {
// ...
})
})
executeStatement() { // ... }
然后在executeStatement()
将column.value
改为return column.value
在前端模板中,您可以迭代数据并根据需要输出:
<% arrData.forEach(value => { %>
// do something with each value
<% }) %>