ctr + r
をクリックすると、データ全体が表示されないことがあります。私の("/")
ページに私は左側と右側を持っています。左側にはすべてのデータが表示され、右側にはランダムなデータが表示されます。ほとんどの場合は動作しますが、キーボードのctr + r
をクリックすると、一部またはすべてのデータが表示されないことがあります。データがブラウザに表示されない場合があります
これは私のコードの仕組みです。
- は(今私は3 elems。3つのドキュメントを持っている)
arr
からのデータにcomps
コレクションを設定します。 - 実際にはそれはコレクションからすべてのコンテンツを削除するので、「/」に行く度に3つのドキュメント(テスト用)を取得します
- すべてのドキュメントをフィルタで検索し、左側に表示します(findメソッドがdocを返すので表示できます)、レンダリングでdocを使用します。
- findOne()を使用してランダムを取得します。
また、私は自分のコードにconsole.log()があり、正しい情報を管理していることに注意してください。私はコンソールで3つの文書すべてを取得します。
正直言って、私はレンダリング時にモデルに複数のメソッドを使用したことはありません。モデルメソッドではランダムメソッドを使用したことはありません。だから私はおそらくそれを台無しにする。
リフレッシュ時にデータが表示されないことがある理由を知りたいと思います。
server.js
var express = require("express"),
app = express(),
mongoose = require("mongoose"),
ejs = require("ejs");
mongoose.connect("mongodb://localhost/comp1");
var port = process.env.PORT || 3000;
app.set("view engine", "ejs");
app.use(express.static("./public"));
var Comp = require("./models/company.js");
app.get("/", function(req, res){
var arr = [
{name : "comp1",industry : "industry1", ranking: 20},
{name : "comp2",industry : "industry2", ranking: 5},
{name : "comp3",industry : "industry3", ranking: 10}
]
Comp.count({}, function(err, count){
var random = Math.floor(Math.random() * count);
Comp.find({}).remove({}, function(){
console.log("removed")
})
Comp.create(arr, function(err, docs){
console.log(docs)
console.log(count)
})
Comp.find({}, 'name -_id ranking', {sort :{ranking :1}}, function(err, doc){
if(err) throw err;
Comp.findOne().skip(random).exec(function(err, result){
res.render("index",{data : doc , count: random , result : result})
})
})
})
})
app.listen(port, function(){
console.log("node is listening on port : " + port);
})
index.ejs
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>index</title>
<link rel="stylesheet" href="/style.css">
</head>
<body>
ontop
<div class="container clearfix">
<div class="leftSide">TEST
<%= data%>
<%data.forEach(function(comp){%>
<div><%= comp.name %> <span>ranking : <%= comp.ranking %></span></div>
<% }); %>
</div>
<div class="rightSide">side <%= count %>
<div><%=result %></div>
</div>
</div>
</body>
</html>
company.ejs
var mongoose = require("mongoose");
var Schema = mongoose.Schema;
var compSchema = new Schema({
name : String,
industry: String,
ranking : Number,
created_at : Date,
updated_at : Date,
inc : Number
});
compSchema.pre("save", function(next){
var currentDate = new Date();
this.updated_at = currentDate;
var counter = 0;
this.inc = counter;
counter++;
if(!this.created_at){
this.created_at = currentDate;
}
next();
})
var Comp = mongoose.model("Comp", compSchema);
module.exports = Comp;
非同期コードを同期して使用しています。これは、あなたがそれを期待する方法では決して動作しません。ちょうど複数のDBクエリを行う方法をいくつかの例を見つけると私はあなたの答えを見つけると思う – Molda
約束はここに私を助けるだろうか?このリンクhttps://developer.mozilla。org/ja-ja/docs/Web/JavaScript /リファレンス/ Global_Objects/Promise?私はこれを学ばなくてはいけませんでした。 –
'findOne'のようなメソッドは同期していますか?私はコールバックでそれを使用しているので、私は何かを使うべきです。 –