2017-08-23 3 views
0

これはWeb開発の最初のプロジェクトです.ExpressJSとMongoDBを使用しています。私は基本的にビューページのボタンをクリックし、データベース(mongodb)内の特定のデータを取得してボタン要素の直上にコンテンツを表示したいと考えています。それは私がこれまで持っているものです:mongooseを使ってデータベースの値を取得し、同じページに表示する(ExpressJSとMongoDB)

私のスキーマ(私はユーザーのスキーマは異なりますが、データを取得したいものです)。

const mongoose = require('mongoose'); 

// Redacao Schema 
var RedacaoSchema = mongoose.Schema({ 
    testing1: { 
    type: String 
    } 
    }); 

var Redacao = module.exports = mongoose.model('Redacao', RedacaoSchema); 

ここでは、ボタンをクリックしてデータベースから特定のデータを取得し、ボタンの上の同じページに表示します。私はビューエンジンとしてハンドルバーを使用しています。マイビュー:

<div id="target"> 
</div> 

<input id="receberRedacao" type="button" value="User data"> 

<script> 
$(document).ready(function(){ 
    $('#receberRedacao').click(function (e) { 
     e.preventDefault(); 
     $.ajax({ 
      url: "https://stackoverflow.com/users/usuario/redacaoteste", 
      type: "get", 
     }); 
     console.log(texto1); 
     $("<div id='redacao-usuario'>A redação do usuário está aqui. >>> {{texto1}} </div>").appendTo('#target'); 
    }); 
}); 
</script> 

マイルータ:

var express = require('express'); 
var router = express.Router(); 
var Redacao = require('../models/redacao'); 

router.get('/usuario/redacaoteste', function(req, res) { 
    var texto1 = Redacao.findOne({}); 
    console.log('>>>', texto1); //testing the variable I get something crazy 
    res.render('usuario', {texto1}); 
}); 

module.exports = router; 

答えて

0

findOneが非同期であるとして、あなたは、コールバックを使用する必要があります。

router.get('/usuario/redacaoteste', function(req, res) { 
    Redacao.findOne({}, function(err, doc) { 
     if (err) { 
      // Handle error here 
     } 
     console.log('>>>', doc); 
     res.render('usuario', doc); 
    }); 
}); 
0

を私は問題のあるコードのための答えを見つけます。彼らが他人を助けるかもしれないので、私はここに回答を掲示します。

サーバー側: 1ºデータベースで変数を見つけるときにエラーを処理するという約束が必要です。 2ºres.renderは使用できません。変数を渡すにはres.jsonでなければなりません。それ以外の場合は、HTMLコード全体が返されます。

router.get('/usuario/receber', function(req, res) { 
     Redacao 
      .findOne({}) 
     .then(doc => {console.log(doc), res.json(doc)}) 
     .catch(err => { 
      console.log(err); 
      res.status(500).send({ message: err }); 
     }); 
}); 

クライアント側:Ajaxリクエストで成功関数が欠けていました。

function successCallback(responseObj){ 
    console.log(responseObj); 
}; 

$(document).ready(function(){ 
    $('#receberRedacao').click(function (e) { 
     e.preventDefault(); 

     $.ajax({ 
      url: "https://stackoverflow.com/users/usuario/receber", 
     type: "get", 
     success: function(response){ 
       successCallback(response); 
      } 
     }); 
    }); 
}); 
関連する問題