Files
JMuseum/models/DataRender.js
2018-02-26 14:09:18 +08:00

69 lines
3.0 KiB
JavaScript
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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;