請關注我的小站:http://oideas.herokuapp.com/
//暫時不做處理
這段註釋替換成:
User.getById(user._id, function(err, temp) {
if (!temp) {
//如果用戶不存在,那user就是null
mind = new Mind({
content : cont,
user : null,
flag : flag
});
}
mind = new Mind({
content : cont,
user : temp,
flag : flag
});
console.log(mind);
mind.save(function(err, mind) {
if (err) {
req.flash('error', err);
return res.redirect('/upminds');
}
//不知到爲何,測試的時候session中的user時常clear,所以我基本上在每個方法中加入下面這個段
req.session.user = user;
res.redirect('/');
});
});
爲什麼不知接用session中的user,還要查一下,其實,你可一試試,而且告訴你sessionn中的user也是可以的,目前也不會有影響,但是當我們用user的id去找一個用戶並根據找到的這個用戶再去查相關的mind,你發現找不到結果,爲什麼?我也不清楚,這是我的解決方法。我們直接在mind中存放一個完整的user這雖然顯得有些浪費,但是我也是爲了方便而已。。
<img src="/images/tem.jpg" title="OMinds">
<a href="/">OMinds</a>
替換成:
<%if(mind.user){%>
<img src="<%=mind.user.photo%>" title="<%=mind.user.nickname%>">
<a href="/userinfor?uid=<%=mind.user._id%>"><%=mind.user.nickname%></a>
<%}%>
顯示也做好了,找個用戶登錄系統,測試一下吧,點擊投稿,隨便寫點什麼,提交後發現,呀~,怎麼報錯了,還是什麼Error: db object already connecting, open cannot be called multiple times之類的的東西,一看代碼行,說是我們的mind.save方法,恩,別擔心,看看它的上一級方法是User.getById恩,我們打開models/user.js具體看看這個方法,恩,果然,db沒有關閉,好,修改一下這個方法:
// R(查,通過ID)
User.getById = function(id, callback) {
mongodb.open(function(err, db) {
if (err) {
return callback(err);
}
db.collection('users', function(err, collection) {
if (err) {
db.close();
return callback(err);
}
collection.findOne({
_id : new ObjectID(id)
}, function(err, user) {
db.close();
if (err) {
return callback(err);
}
callback(null, user);
});
});
});
};
就是在最後返回的時候加了一句db.close()方法,爲什麼要跟大家說這個問題,其實這些方法寫完之後是沒有做過驗證的,而且我也是一步一步去做的,遇到問題,也是要去解決的,也是藉此告訴大家,有問題,不是問題,我們可以解決它。
<li><a id="putups<%= mind._id %>" name="putups" href="javascript:putUps('<%= mind._id %>');" title="<%=mind.ups%>個贊" >贊[<%=mind.ups%>]</a></li>
<li><a id="putdowns<%= mind._id %>" name="putdowns" href="javascript:putDowns('<%= mind._id %>')" title="<%=mind.downs%>個踩">踩[<%=mind.downs%>]</a></li>
在index.ejs最後添加js方法:
<script type="text/javascript">
function putUps(oid){
var params ={
oid:oid
};
$.ajax({
data: params,
url: '/addups',
type:'post',
jsonpCallback: 'callback',
success: function(data){
console.log(data);
$('#putups'+oid).attr("title",data+'個贊');
$('#putups'+oid).html("贊["+data+"]");
},
error: function(jqXHR, textStatus, errorThrown){
alert('error ' + textStatus + " " + errorThrown);
}
});
}
function putDowns(oid){
var params ={
oid:oid
};
$.ajax({
data: params,
url: '/addowns',
type:'post',
jsonpCallback: 'callback',
success: function(data){
$('#putdowns'+oid).attr("title",data+'個踩');
$('#putdowns'+oid).html("踩["+data+"]");
},
error: function(jqXHR, textStatus, errorThrown){
alert('error ' + textStatus + " " + errorThrown);
}
});
}
</script>
//通過id查找
Mind.getById = function(id, callback) {
mongodb.open(function(err, db) {
if (err) {
return callback(err);
}
db.collection('minds', function(err, collection) {
if (err) {
db.close();
return callback(err);
}
collection.findOne({
_id : new ObjectID(id)
}, function(err, mind) {
db.close();
if (err) {
return callback(err);
}
callback(null, mind);
});
});
});
};
好,可以做邏輯處理了,打開routes/index.js,加入:
app.post('/addups', function(req, res) {
var oid=req.body.oid;
Mind.getById(oid, function(err, mind) {
if (!mind) {
req.flash('error', err);
return res.redirect('/');
}
var temp = mind.ups + 1;
Mind.update(oid, temp, mind.downs, mind.comments,function(err) {
if (err) {
req.flash('error', err);
return res.redirect('/');
}
console.log(temp);
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end(temp.toString());
//res.json({success:1});
return;
});
});
});
app.post('/addowns', function(req, res) {
var eid = req.body.oid;
Mind.getById(eid, function(err, mind) {
if (!mind) {
req.flash('error', err);
return res.redirect('/');
}
var temp = mind.downs + 1;
Mind.update(eid, mind.ups, temp, mind.comments, function(err) {
if (err) {
req.flash('error', err);
return res.redirect('/');
}
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end(temp.toString());
return;
});
});
});
簡單嗎?趕快試試把,注意,'Content-Type': 'text/plain'這句話,這個是一text方式傳輸數據,你可一設置application/json試試,這樣前端可能通過json格式獲取了(我沒試過,你們可以嘗試一下)