使用 nodejs(expressjs) 从 mysql 获取记录到表单
Fetch records from mysql to a form with nodejs(expressjs)
想要从 mysql 获取记录到 Web 表单,以便用户可以进行更改和更新。正在从数据库中的不同表中获取记录。
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>
我有这个错误“数据未定义”
请帮忙
问题是,当您创建路线时,第一次出现会发生,如果其他路线相同,则不会。在你的例子中你说你'/'将呈现更新学生,但只有第一个会发生,在第一个中你只发送来自学生的信息
基本上我要说的是:每个路由都是一个页面。你有两条路线,对吧?所以它们是两个不同的页面!在您的情况下,它们具有相同的路径,因此只有第一个会呈现。
这是我给你的建议:
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>
代码未经测试,抱歉,我只是想写给你。
分解如下:
在路由器中,我们声明了三个变量。 isFinishedCount 用于我们对数据库的异步调用以获取学生和类别,因为对数据库的这两个调用将在他们自己的时间发生,一旦每个完成我们测试我们是否可以呈现页面,这就是为什么我们在之后调用 isFinished()每个成功的数据库调用。我从来没有像你那样使用过数据库调用,所以我只是复制你的代码并进行调整。
现在,我们将结果放入两个变量中,student 和 category,以便稍后我们可以呈现页面并将它们提供给数据,因此当在 .ejs 中时,您将获取您已经获得的数据刚刚获得,您将在数据中拥有它们:
data - student
- category
这为您提供了一个小空间 "box",您可以在其中放置所有需要的信息,因此稍后您可以对其他页面使用相同的模型。这样您将始终知道您的数据将在 "data".
中
再次抱歉,如果有任何错误,我没有机会测试它我不得不在旅途中编写它,我会在几个小时后再次检查并测试代码是否我有机会。
编码愉快!
想要从 mysql 获取记录到 Web 表单,以便用户可以进行更改和更新。正在从数据库中的不同表中获取记录。
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>
我有这个错误“数据未定义”
请帮忙
问题是,当您创建路线时,第一次出现会发生,如果其他路线相同,则不会。在你的例子中你说你'/'将呈现更新学生,但只有第一个会发生,在第一个中你只发送来自学生的信息
基本上我要说的是:每个路由都是一个页面。你有两条路线,对吧?所以它们是两个不同的页面!在您的情况下,它们具有相同的路径,因此只有第一个会呈现。
这是我给你的建议:
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>
代码未经测试,抱歉,我只是想写给你。
分解如下: 在路由器中,我们声明了三个变量。 isFinishedCount 用于我们对数据库的异步调用以获取学生和类别,因为对数据库的这两个调用将在他们自己的时间发生,一旦每个完成我们测试我们是否可以呈现页面,这就是为什么我们在之后调用 isFinished()每个成功的数据库调用。我从来没有像你那样使用过数据库调用,所以我只是复制你的代码并进行调整。
现在,我们将结果放入两个变量中,student 和 category,以便稍后我们可以呈现页面并将它们提供给数据,因此当在 .ejs 中时,您将获取您已经获得的数据刚刚获得,您将在数据中拥有它们:
data - student
- category
这为您提供了一个小空间 "box",您可以在其中放置所有需要的信息,因此稍后您可以对其他页面使用相同的模型。这样您将始终知道您的数据将在 "data".
中再次抱歉,如果有任何错误,我没有机会测试它我不得不在旅途中编写它,我会在几个小时后再次检查并测试代码是否我有机会。
编码愉快!