节点js – 如何用Mongoose填充多个“select”控件

我有一个快速js的项目,我正在使用mongoose,我可以填写一个select控制:

app.get('/new_alumno', alumno.create); 

但现在我想填写多个select控件,但是我不知道如何从我的控制器发送两个以上的值到我的视图。

我的app.js文件包含下面的代码

 var express = require('express'); var routes = require('./routes'); var user = require('./routes/user'); var http = require('http'); var path = require('path'); //Reference to the controllers var alumno = require('./controllers/ctrl_alumno'); var app = express(); // all environments app.set('port', process.env.PORT || 3000); app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'jade'); app.use(express.favicon()); app.use(express.logger('dev')); app.use(express.json()); app.use(express.urlencoded()); 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()); } //Routes app.get('/', routes.index); app.get('/alumnos', alumno.listalumnos); app.get('/new_alumno', alumno.create); app.post('/save_alumno', alumno.save); http.createServer(app).listen(app.get('port'), function(){ console.log('Express server listening on port ' + app.get('port')); }); 

我的控制器ctrl_alumno.js包含以下代码:

 // Crear conexion con MongoDB var mongoose = require('mongoose'); var db_link = 'mongodb://localhost/alumnosnormalized'; var db = mongoose.createConnection(db_link); // Variables para cargar el modelo var alumno_schema = require('../models/alumno'); var carrera_schema = require('../models/carrera'); var entidad_schema = require('../models/entidad'); var Alumno = db.model('Alumno', alumno_schema); var Carrera = db.model('Carrera', carrera_schema); var Entidad = db.model('Entidad', entidad_schema); exports.create = function(req, res, next){ Carrera.find(getCarreras); function getCarreras(err, carrera){ if(err) { console.log(err); return next(); } return res.render('newalumno',{title:'Lista de alumnos', carreras: carrera}); }; }; 

我的学生视图包含以下代码:

 block content h1= title div(class="form_settings") h2 Ingrese la informacion necesaria para registrar una Entidad form#formAddPlayer(name="addalumno",method="post",action="/save_alumno") p input#inputNombre(class="contact", type="text", placeholder="Nombre del Alumno", name="nombreAlumno") p input#inputApaterno(class="contact", type="text", placeholder="Apellido Paterno", name="aPaterno") p input#inputAmaterno(class="contact", type="text", placeholder="Apellido Materno", name="aMaterno") p select(name="idCarrera") option(value="",selected="selected") Seleccione un elemento de la lista each item, i in carreras option(value='#{item._id}') #{item.descripcion} p button#btnSubmit(class="submit", type="submit") Guardar Alumno 

我只能用这个代码填充一个select控件,它可以工作。

 <select name="idCarrera"> <option value="" selected="selected">Seleccione un elemento de la lista</option> <option value="5330a2a7ab37e2b810000001">Quimica</option> <option value="5330a575a20912b013000001">Mecanica</option> <option value="5331c63f6ddf2b4c0c000001">Contaduria</option> </select> 

任何人都可以帮助我从我的控制器传递多个值,或者使用mongoose填充多个select控件?

你可以使用asynchronous并行,然后返回结果数组。 并行方法需要一个带有callback参数的asynchronous函数数组,并返回一个结果数组。 您可以根据需要将任意数量的函数添加到数组中。

https://github.com/caolan/async#parallel

例如

 async.parallel([ function(callback) { Alumno.find({}, function(err, result){ callback(err, result); }); }, function(callback) { Carrera.find({}, function(err, result){ callback(err, result); }); } ], function(err, results) { // Results here will be an array results returned from the database. // You can manipulate the results here before returning to the view. return res.render('view', {results : results}); });