const User = require("./mongooseSchemas/User"); // 引入「使用者 (User)」資料庫表。 const ServerStatus = require("../ServerStatus"); /** * 插值來源對應表。可以迅速的比對使用者要求的頁面需要什麼樣的插值。 */ const renderList = { "index": require("./renderModels/index"), "gallery": require("./renderModels/gallery"), "theme": require("./renderModels/theme"), "feedback": require("./renderModels/feedback"), "login": require("./renderModels/login"), "signup": require("./renderModels/signup"), "message_form": require("./renderModels/message_form"), "personal_page": require("./renderModels/personal_page"), "edit_personal_info": require("./renderModels/edit_personal_info"), "write_message": require("./renderModels/write_message"), "change_password": require("./renderModels/change_password"), "drawing": require("./renderModels/drawing"), "showcase": require("./renderModels/showcase"), "submit_theme": require("./renderModels/submit_theme"), "vote_theme": require("./renderModels/vote_theme") }; /**  * 插值資料給予者。 * 依照使用者所給的路由位置,此函式就會回傳相對應的插值物件。 * @param {string} source 頁面的模板來源名稱(Pug Template)。 * @param {string} route 路由路徑。 * @param {Express.Session} session Express 的 Session物件。 * @param {CallbackFunction} callback 回呼函式。傳回錯誤訊息與插值資料。 */ function DataRender(source, route, session, callback) { // 檢查Session中是否有passport欄位,若有,則嘗試取得user(資料庫中的_id);若無,則設為null。 let _id = session.passport ? session.passport.user : null; // 建構 dataObject 物件 let dataObject = { source: source, extendedStyle: source + "_extended.css", title: route, hasLogin: (_id !== undefined && _id !== null), username: null, notices: null, datas: {}, haveSubmitThemeEvent: ServerStatus.status.submitThemeEvent, haveVoteThemeEvent: ServerStatus.status.voteThemeEvent }; // 嘗試取得資料來設定與目標使用者有關的基本資料(Username與通知數) User.SetBasicInformation(_id, dataObject, function (err, dataObject) { // 若該路由有在清單中,則透過指定的插值方法來為dataObject加入其所需要的資料 if (source in renderList) { // 透過source來取得該頁面的插值資料,也就是設定 dataObject.datas 內容。 renderList[source].Render(dataObject, route, session, function (err, isSuccess) { if (err) callback(err, null); else callback(null, dataObject); }); } // 若不包含在清單中的,則視為例外 else { callback(new Error("找不到對應的插值物件或Pug模板。"), null); } }); } module.exports.DataRender = DataRender;