0

我坚持我所知道的对于更有经验的 node.js 开发人员来说可能是一个超级容易解决的问题。我似乎无法让我返回的查询显示在我的车把模板中。

我的应用程序设置如下:

应用程序.js

var express  = require('express')
  , mongoose = require('mongoose')
  , exphbs   = require('express3-handlebars');

var uri = 'mongodb://localhost/test';

global.db = mongoose.connect(uri);

var app = express();

// configure Express
app.configure(function() {
  app.set('views', __dirname + '/views');
  app.set('view engine', 'handlebars'); //set to handlebars to use the handlebars engine
  app.engine('handlebars', exphbs({defaultLayout: 'main'})); //set to express3-handlebars to use handlebars
  app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use('/', express.static('public'));
  app.use(app.router);
});

var api = require('./public/js/api');

app.get('/', function (req, res) {
    res.render('home', {user: api.user});
});

app.listen(3000);

console.log('Listening on port 3000');

然后我将我的架构放在模型文件夹中,并将其命名为 userschema.js

用户模式.js

var Schema = require('mongoose').Schema;

//create our user model
var userSchema = Schema({
  username: { type: String, required: true, unique: true },
  email: { type: String, required: true, unique: true },
  password: { type: String, required: true},
});

// db is global
module.exports = db.model('users', userSchema);

然后我通过一个名为 api.js 的 js 文件公开模型

var model = require('../../models/userschema')

exports.modelName = function (req, res) {
  res.send('my model name is ' + model.modelName);
}

exports.user = function(req, res) {
    model.findOne({username: 'TestUser'}, function (err, user) {
        //res.send(user);
        res.render('home', {user: user.username});
        console.log('USER:' + user.username);
  });
}

我不明白为什么我不能让它显示在我的车把模板上。如果我将 api.user 更改为“ME”,那么我会看到输出,如果没有,我会收到错误消息。如果我去 app.get('/', api.user); 我看到我的查询返回了。任何建议,将不胜感激。

4

1 回答 1

0

好吧,您已经说明了一种可能的解决方案,即绑定api.user到如下路由'/'

如果我去,app.get('/', api.user);我也会看到我的查询返回。

问题在于,这api.userfunction一个明显的路由处理程序:

exports.user = function(req, res) {
    model.findOne({username: 'TestUser'}, function (err, user) {
        //res.send(user);
        res.render('home', {user: user.username});
        console.log('USER:' + user.username);
  });
}

但是,您似乎正在尝试使用它,就好像它是您的值一样userSchema

app.get('/', function (req, res) {
    res.render('home', {user: api.user});
});

我猜你得到的错误是因为 Handlebars 试图function执行getter。但是,在这种用法下,第二个参数 ,res不会是带有render()方法的对象。

于 2013-07-10T19:46:54.323 回答