96 lines
3.3 KiB
JavaScript
96 lines
3.3 KiB
JavaScript
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); |