2016-04-15 78 views
0

我有以下代碼快速將信息發送到用戶與頁面

var user = function(req,res,next) { 
db.findOne({ username: req.params.uid }, function (err, docs) { 
//error handaling 
if(err){console.log(err)} 
//check if user is real 
if(docs === null){ 
    res.end('404 user not found'); 
}else{ 
    //IMPORTANT PART res.sendFile(__dirname + '/frontend/user.html'); 
    } 
}); 

}

app.get('/user/:uid',user); 

不要擔心數據庫的東西。

我想知道如何讓req.params.uid發送到客戶端,以及如何從那裏獲取它。

非常感謝。

+0

這取決於你發送給客戶端的意思。如果您只是想獲取每個請求,則可以將其作爲cookie發送。查看這些['res.cookie'](http://expressjs.com/en/api.html#res.cookie)發送cookie和['req.cookies'](http://expressjs.com/ en/api.html#req.cookies)在未來的請求中獲取它。 – hargasinski

+0

你的問題有點含糊,你問如何將req.params.uid發送給客戶端?如果這是個問題,'req.params.uid'意味着它已經從客戶端發送 – Yerken

+0

嘗試這個'return response.render('yourview',req.params.uid);' – uzaif

回答

0

如果您的用戶配置正確每個請求將有一個用戶:

var user = function(req,res) { 
db.User.findOne({ _id: req.user._id }, function (err, docs) { 
//error handaling 
if(err){console.log(err)} 
//check if user is real 
if(docs === null){ 
    res.end('404 user not found'); 
}else{ 
    res.json(docs) 
    } 
}); 

,然後你的API端點只是'/user/

在您的客戶端只是做一個GET請求該端點(可能使用AJAX),你的迴應將是任何提出請求的用戶。

注意:除非定義中間件,否則不需要傳入next

+0

如果這是不正確的,那麼是的,你的問題太模糊了。也許你正在嘗試使用像Jade或EJS這樣的服務器模板引擎。 – fresh5447

+0

感謝這幫助堆積正是我需要的 –

+0

請問您是否願意接受它作爲答案。謝謝! – fresh5447

0

這只是基於我的評論的更完整的答案。

如果要存儲關於用戶的一系列信息並提供他們提出的每個請求,那麼您希望使用cookies

當用戶第一次向頁面發出請求時,您可以通過res.cookie來設置cookie。所以,在你的代碼,最終if聲明看起來是這樣的:

if(docs === null) { 
    res.end('404 user not found'); 
} else { 
    res.cookie('uid', req.params.uid, { httpOnly: true }); 
    //IMPORTANT PART res.sendFile(__dirname + '/frontend/user.html'); 
} 

然後,在接下來的請求,Cookie到期期貨請求之前,您可以通過訪問:

req.cookies.uid 

但是,你的地方需要cookie-parser中間件在您的應用程序事先:

var cookieParser = require('cookie-parser'); 
app.use(cookieParser()); 

如果您需要訪問的值在客戶端上,您可以使用模板,或者在使用res.cookie進行設置時將httpOnly的值設置爲false。然後,您可以使用document.cookies訪問cookie

檢查出this W3Schools page在客戶端訪問cookie。