<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                [TOC] # app.js ## 導入文件 ### 配置文件 ~~~ var config = require('./config'); ~~~ ### oneapm ~~~ if (!config.debug && config.oneapm_key) { require('oneapm'); } ~~~ ### 依賴庫 ~~~ require('colors'); var path = require('path'); var Loader = require('loader'); var LoaderConnect = require('loader-connect') var express = require('express'); var session = require('express-session'); var passport = require('passport'); var RedisStore = require('connect-redis')(session); var _ = require('lodash'); var csurf = require('csurf'); var compress = require('compression'); var bodyParser = require('body-parser'); var busboy = require('connect-busboy'); var errorhandler = require('errorhandler'); var cors = require('cors'); var helmet = require('helmet'); var bytes = require('bytes') ~~~ ### 數據庫 ~~~ // 打印 mongodb 查詢日志 require('./middlewares/mongoose_log'); 導入models require('./models'); ~~~ ### github登錄 ~~~ var GitHubStrategy = require('passport-github').Strategy; var githubStrategyMiddleware = require('./middlewares/github_strategy'); ~~~ ### 路由 ~~~ var webRouter = require('./web_router'); var apiRouterV1 = require('./api_router_v1'); ~~~ ### models ~~~ var auth = require('./middlewares/auth'); var errorPageMiddleware = require('./middlewares/error_page'); var proxyMiddleware = require('./middlewares/proxy'); var requestLog = require('./middlewares/request_log'); var renderMiddleware = require('./middlewares/render'); ~~~ ### 日志 ~~~ var logger = require('./common/logger'); ~~~ <br> ## 運行前配置 ### 靜態文件目錄 ~~~ var staticDir = path.join(__dirname, 'public'); ~~~ ### assets ~~~ // assets var assets = {}; if (config.mini_assets) { try { assets = require('./assets.json'); } catch (e) { logger.error('You must execute `make build` before start app when mini_assets is true.'); throw e; } } ~~~ ### hostname ~~~ var urlinfo = require('url').parse(config.host); config.hostname = urlinfo.hostname || config.host; ~~~ <br> ## 運行 ### express ~~~ var app = express(); ~~~ ### 模板 ~~~ // configuration in all env app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'html'); app.engine('html', require('ejs-mate')); app.locals._layoutFile = 'layout.html'; ~~~ ### trust proxy 支持反向代理 當enable以后, 可以支持X-Forwarded-Proto(協議代理) X-Forwarded-For(ip代理), X-Forwarded-Host(主機代理), ~~~ app.enable('trust proxy'); ~~~ ### 輸出請求時間、渲染時間 ~~~ // Request logger。請求時間 app.use(requestLog); if (config.debug) { // 渲染時間 app.use(renderMiddleware.render); } ~~~ ### 靜態資源 ~~~ // 靜態資源 if (config.debug) { app.use(LoaderConnect.less(__dirname)); // 測試環境用,編譯 .less on the fly } app.use('/public', express.static(staticDir)); // 當 google 和 github 封鎖嚴重時,則需要通過服務器代理訪問它們的靜態資源 app.use('/agent', proxyMiddleware.proxy); ~~~ ### 通用中間件 ~~~ app.use(require('response-time')()); app.use(helmet.frameguard('sameorigin')); app.use(bodyParser.json({limit: '1mb'})); app.use(bodyParser.urlencoded({ extended: true, limit: '1mb' })); app.use(require('method-override')()); app.use(require('cookie-parser')(config.session_secret)); app.use(compress()); app.use(session({ secret: config.session_secret, store: new RedisStore({ port: config.redis_port, host: config.redis_host, db: config.redis_db, pass: config.redis_password, }), resave: false, saveUninitialized: false, })); ~~~ ### passport中間件 ~~~ // oauth 中間件 app.use(passport.initialize()); // github oauth passport.serializeUser(function (user, done) { done(null, user); }); passport.deserializeUser(function (user, done) { done(null, user); }); passport.use(new GitHubStrategy(config.GITHUB_OAUTH, githubStrategyMiddleware)); ~~~ ### 自定義中間件 ~~~ // 驗證用戶是否登錄 app.use(auth.authUser); // 驗證用戶是否被屏蔽 app.use(auth.blockUser()); ~~~ ### csurf添加csrfToken方法、校驗token ~~~ if (!config.debug) { app.use(function (req, res, next) { if (req.path === '/api' || req.path.indexOf('/api') === -1) { csurf()(req, res, next); return; } next(); }); app.set('view cache', true); } ~~~ ### 錯誤頁 ~~~ app.use(errorPageMiddleware.errorPage); ~~~ ### csrfToken設置 ~~~ _.extend(app.locals, { config: config, Loader: Loader, assets: assets }) _.extend(app.locals, require('./common/render_helper')); app.use(function (req, res, next) { res.locals.csrf = req.csrfToken ? req.csrfToken() : ''; next(); }); ~~~ ### 上傳插件connect-busboy ~~~ app.use(busboy({ limits: { fileSize: bytes(config.file_limit) } })); ~~~ ### 路由 ~~~ app.use('/api/v1', cors(), apiRouterV1); app.use('/', webRouter); ~~~ ### error handler ~~~ if (config.debug) { app.use(errorhandler()); } else { app.use(function (err, req, res, next) { logger.error(err); return res.status(500).send('500 status'); }); } ~~~ ### 端口監聽 ~~~ if (!module.parent) { app.listen(config.port, function () { logger.info('NodeClub listening on port', config.port); logger.info('God bless love....'); logger.info('You can debug your app with http://' + config.hostname + ':' + config.port); logger.info(''); }); } ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看