0

私が知っていることは、経験豊富な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 という名前を付けます。

ユーザースキーマ.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なルートにバインドするという1つの可能な解決策を述べました'/':

また、行った場合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 がgetterfunctionとして実行しようとしているため、エラーが発生していると思います。しかし、この使用法では、第 2 引数はメソッドを持つオブジェクトにはなりません。resrender()

于 2013-07-10T19:46:54.323 に答える