从mysql获取logging到一个带有nodejs(expressjs)的表单

希望从MySQL获取logging到一个Web表单,以便用户可以进行更改和更新。 我从数据库的不同表中获取logging。

update.js

var express = require('express'); var router = express.Router(); var db = require('./../db'); router.get('/', function(req, res, next) { db.select('*').from('student').then(function(rows){ res.render('update-student',{title:'Update Student',data:rows}) }); }); router.get('/', function(req, res, next) { db.select('*').from('category').then(function(result){ res.render('update-student',{title:'Update Student',edata:result}) }); }); module.exports = router; 

update_student.ejs

 <select> <option></option> <% for (var i = 0; i < data.length; i++) {%> <option value=""><%= data[i].gender; %></option> <% }%> </select> <select> <option></option> <% for (var i = 0; i < edata.length; i++) {%> <option value=""><%= edata[i].cat_name; %></option> <% }%> </select> 

我有这个erorr“ edata没有定义

请任何帮助

问题是,当你创build一条路线时,第一个事件就会发生,如果他们有相同的path,其他事件就不会发生。 在你的例子中,你说的是'/'会呈现更新的学生,但只有第一个会发生,而第一个只发送学生的信息

基本上我所说的是:每条路线都是一个页面。 你有两条路线,对吗? 所以他们是两个不同的页面! 在你的情况下,他们有相同的path,所以只有第一个会渲染。

以下是我对你的build议:

update.js

 var express = require('express'), router = express.Router(), db = require('./../db'); router.get('/', function(req, res, next) { var isFinishedCount = 1, student = [], category = []; db.select('*').from('student').then(function(rows){ student = rows; isFinished(); }); db.select('*').from('category').then(function(rows){ category = rows; isFinished(); }); function isFinished(){ if(isFinishedCount == 0){ res.render('update-student',{ title:'Update Student', data: { student : student, category: category } }); }else{ isFinishedCount--; } } }); module.exports = router; 

update_student.ejs

 <select> <option></option> <% for (var i = 0; i < data.student.length; i++) {%> <option value=""><%= data.student[i].gender; %></option> <% }%> </select> <select> <option></option> <% for (var i = 0; i < data.category.length; i++) {%> <option value=""><%= data.category[i].cat_name; %></option> <% }%> </select> 

代码没有testing,对不起,我只是想写给你。

下面是分解:在路由器中,我们声明了三个variables。 isFinishedCount是我们对数据库的asynchronous调用来获取学生和类别,因为这两个调用数据库将发生在他们自己的时间,一旦完成,我们testing,如果我们可以呈现页面,这就是为什么我们调用isFinished()之后每个成功的db调用。 我从来没有使用过数据库调用,所以我只是复制你的代码和适应。

现在,我们把结果放在两个variablesstudent和category中,以便稍后我们可以渲染页面,并将它们提供给数据,所以当在.ejs中提取刚获得的数据时,他们在数据:

 data - student - category 

这为您提供了一个小型的“盒子”,您可以在其中放置所需的所有信息,以便在以后的案例中为您的其他网页使用相同的模型。 这样你就可以知道你的数据将在“数据”里面。

再次抱歉,如果有任何错误,我没有机会testing它,我必须在旅途中写它,我会在几个小时内再次检查,如果我有机会testing代码。

快乐的编码!