我坚持认为对于更有经验的node.js开发人员来说,这可能是一个非常容易的问题。我似乎无法将我的返回查询显示在我的车把模板中。
我的应用程序设置如下:
app.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
userschema.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);我看到我的查询返回。任何建议将不胜感激。
答案 0 :(得分:0)
嗯,您已经说过一个可能的解决方案,即将api.user
绑定到'/'
之类的路由:
如果我去
app.get('/', api.user);
,我会看到我的查询返回。
问题是api.user
是function
- 一个明显的路由处理程序:
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()
方法的对象。