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

96 lines
3.3 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

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 http = require("http");
const path = require('path');
const lineReader = require('readline').createInterface({input : process.stdin, output : process.stdout});
const bodyParser = require('body-parser');
const cookieParser = require('cookie-parser');
const express = require("express");
const expressValidator = require('express-validator');
const session = require('express-session');
const passport = require('passport');
const flash = require("connect-flash");
const mongodb = require("mongodb");
const mongoose = require("mongoose");
const MongoStore = require('connect-mongo')(session);
const pug = require("pug"); // *** Pug的版本為 2.0.0-beta6 原先所安裝的Pug無法使用"include" 與 "extended" 指令
const ServerStatus = require("./ServerStatus");
const ResourceManager = require("./models/ResourceManager");
// 讀取伺服器狀態檔案
ServerStatus.LoadStatus((err) => {
console.log(err ? "Read server status file failed. Please confirm whether the file is in the root directory.\n" :
"Server status file read.\n");
});
// 伺服與網頁應用的變數定義
var mongoConnection, database;
let port = 12001;
let app = express();
global.__dirname = __dirname; // 在全域之下定義這個專案的根目錄路徑
// Connect to Database
mongoose.Promise = Promise;
mongoose.connect('mongodb://localhost/JMuseum', { useMongoClient: true });
mongoConnection = mongoose.connection;
mongoConnection.on('error', console.error.bind(console, 'connection error:'));
mongoConnection.once('open', function() {
console.log("Connected to MongoDB.\n");
database = mongoose.connection.db;
});
// Initialize Web Server Application
app.set("views", "./views");
app.set("view engine", "pug");
app.use("/", express.static(__dirname + "/public"));
app.use(bodyParser.json({ limit: "5mb" }));
app.use(bodyParser.urlencoded({ extended: false })); // bodyParser的urlencoded 模組會與 formidable 相衝突
app.use(cookieParser());
app.use(expressValidator());
app.use(flash());
app.use(session({
secret: "secret",
cookie: { maxAge: null },
resave: true,
store: new MongoStore({ mongooseConnection: mongoose.connection }),
saveUninitialized: true
}));
app.use(passport.initialize());
app.use(passport.session());
app.use(ResourceManager(__dirname + "/db"));
// Setting Server Routes
app.use("/", require("./routes/main"));
// Start Server
let server = http.createServer(app);
server.listen(port, () => {
console.log("Server is listening on *:" + port + " ...\n");
});
// Terminal Controls
lineReader.on("line", require("./models/ServerControl")(ExitApplication));
// Process Events
function ExitApplication() {
// 將文字介面輸入關閉
lineReader.close();
// 把伺服器關閉
server.close(() => {
console.log("Server closed ..\n");
// 與MongoDB結束連線
mongoose.connection.close().then(() => {
console.log("MongoDB disconnected ..\n");
});
// 儲存伺服器狀態檔案
ServerStatus.SaveStatus((err) => {
console.log(err ? "Save server status file failed. Please confirm whether the file is in the root directory of this project.\n" :
"Successfully saved server status file.\n");
});
});
}
process.on("exit", ExitApplication);