gpt4 book ai didi

javascript - 如何使用NodeJS + ExpressJS传递一个数组给Jade显示?

转载 作者:可可西里 更新时间:2023-11-01 07:53:00 27 4
gpt4 key购买 nike

我来自非常“函数式”的编程风格(PHP、Lua、C),我正在尝试将我的想法转变为 NodeJS 使用的 MVC 模型。目前,这对我来说是一个非常陡峭的学习曲线。

我一直在用头撞墙试图让一个简单的 MySQL 数组打印到 Jade。

应用程序.js

/**
* Module dependencies.
*/

var express = require('express')
, routes = require('./routes')
, user = require('./routes/user')
, http = require('http')
, path = require('path')
, mysql = require('mysql');

var app = express();


// all environments
app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));

// development only
if ('development' == app.get('env')) {
app.use(express.errorHandler());
}

app.get('/', routes.index);
app.get('/users', user.list);

//MySQL
var sqlInfo = {
host: '12.34.56.78',
user: 'user',
password: 'pass',
database: 'user'
}

var client = mysql.createConnection(sqlInfo);
client.connect();

client.query( "SELECT * FROM list ORDER BY status ASC LIMIT 25", function(err, row, fields){
if (err) throw err;
else {
var applications = row;
app.render("applications", applications, function(err, html){});
}
});

client.end();

http.createServer(app).listen(app.get('port'), function(){
console.log('Express server listening on port ' + app.get('port'));
});

索引. Jade

extends layout

block content
div.container
div.content
- if (typeof(applications) !== 'undefined')
ul
- each app in data
li= app.status
- else
p Blank slate mate...

div.footer

我认为我的问题源于 app.render/res.render 函数......这个函数的概念并没有真正点击,我在让它工作时遇到了问题,就像我在许多其他函数中看到的那样MySQL + NodeJS 示例。

非常感谢任何提示或提示!

最佳答案

问题是您正试图在 HTTP 流之外呈现查询。这可能是您的意图(在这种情况下,我很想知道您到底想对呈现的结果做什么),但通常,您会在返回结果之前等待 HTTP 请求您的查询。

例如:

app.get('/test', function(req, res) {
// connect to MySQL server
var client = mysql.createConnection(sqlInfo);
client.connect();

// Perform query and wait for results
client.query( "SELECT * FROM list ORDER BY status ASC LIMIT 25", function(err, row, fields) {
// Done with the connection
client.end();

// Handle error
if (err) throw err;
else {
// We got a result: render it
var applications = row;
res.render("applications", { applications : applications });
}
});
});

一些提示:

  • 打开http://localhost:PORT/test可以查看结果
  • 看看connection pooling对于 MySQL,它维护一个与 MySQL 服务器的连接池,而不是每次处理请求时都必须创建一个新连接;
  • 在您的示例代码中,您在 client.query() 之后立即发送了 client.end(),但没有等待查询返回任何结果。所以我将 client.end() 移动到处理查询结果的代码内部,以确保只有在返回结果后才结束连接;
  • 在您的模板中,您引用了一个名为data 的变量,但我认为它应该是applications

关于javascript - 如何使用NodeJS + ExpressJS传递一个数组给Jade显示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16204951/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com