同步操作将从 ittqqzz/NodeJSBlog 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
/*!* finalhandler* Copyright(c) 2014-2017 Douglas Christopher Wilson* MIT Licensed*/'use strict'/*** Module dependencies.* @private*/var debug = require('debug')('finalhandler')var encodeUrl = require('encodeurl')var escapeHtml = require('escape-html')var onFinished = require('on-finished')var parseUrl = require('parseurl')var statuses = require('statuses')var unpipe = require('unpipe')/*** Module variables.* @private*/var DOUBLE_SPACE_REGEXP = /\x20{2}/gvar NEWLINE_REGEXP = /\n/g/* istanbul ignore next */var defer = typeof setImmediate === 'function'? setImmediate: function (fn) { process.nextTick(fn.bind.apply(fn, arguments)) }var isFinished = onFinished.isFinished/*** Create a minimal HTML document.** @param {string} message* @private*/function createHtmlDocument (message) {var body = escapeHtml(message).replace(NEWLINE_REGEXP, '<br>').replace(DOUBLE_SPACE_REGEXP, ' ')return '<!DOCTYPE html>\n' +'<html lang="en">\n' +'<head>\n' +'<meta charset="utf-8">\n' +'<title>Error</title>\n' +'</head>\n' +'<body>\n' +'<pre>' + body + '</pre>\n' +'</body>\n' +'</html>\n'}/*** Module exports.* @public*/module.exports = finalhandler/*** Create a function to handle the final response.** @param {Request} req* @param {Response} res* @param {Object} [options]* @return {Function}* @public*/function finalhandler (req, res, options) {var opts = options || {}// get environmentvar env = opts.env || process.env.NODE_ENV || 'development'// get error callbackvar onerror = opts.onerrorreturn function (err) {var headersvar msgvar status// ignore 404 on in-flight responseif (!err && headersSent(res)) {debug('cannot 404 after headers sent')return}// unhandled errorif (err) {// respect status code from errorstatus = getErrorStatusCode(err)if (status === undefined) {// fallback to status code on responsestatus = getResponseStatusCode(res)} else {// respect headers from errorheaders = getErrorHeaders(err)}// get error messagemsg = getErrorMessage(err, status, env)} else {// not foundstatus = 404msg = 'Cannot ' + req.method + '' + encodeUrl(getResourceName(req))}debug('default %s', status)// schedule onerror callbackif (err && onerror) {defer(onerror, err, req, res)}// cannot actually respondif (headersSent(res)) {debug('cannot %d after headers sent', status)req.socket.destroy()return}// send responsesend(req, res, status, headers, msg)}}/*** Get headers from Error object.** @param {Error} err* @return {object}* @private*/function getErrorHeaders (err) {if (!err.headers || typeof err.headers !== 'object') {return undefined}var headers = Object.create(null)var keys = Object.keys(err.headers)for (var i = 0; i < keys.length; i++) {var key = keys[i]headers[key] = err.headers[key]}return headers}/*** Get message from Error object, fallback to status message.** @param {Error} err* @param {number} status* @param {string} env* @return {string}* @private*/function getErrorMessage (err, status, env) {var msgif (env !== 'production') {// use err.stack, which typically includes err.messagemsg = err.stack// fallback to err.toString() when possibleif (!msg && typeof err.toString === 'function') {msg = err.toString()}}return msg || statuses[status]}/*** Get status code from Error object.** @param {Error} err* @return {number}* @private*/function getErrorStatusCode (err) {// check err.statusif (typeof err.status === 'number' && err.status >= 400 && err.status < 600) {return err.status}// check err.statusCodeif (typeof err.statusCode === 'number' && err.statusCode >= 400 && err.statusCode < 600) {return err.statusCode}return undefined}/*** Get resource name for the request.** This is typically just the original pathname of the request* but will fallback to "resource" is that cannot be determined.** @param {IncomingMessage} req* @return {string}* @private*/function getResourceName (req) {try {return parseUrl.original(req).pathname} catch (e) {return 'resource'}}/*** Get status code from response.** @param {OutgoingMessage} res* @return {number}* @private*/function getResponseStatusCode (res) {var status = res.statusCode// default status code to 500 if outside valid rangeif (typeof status !== 'number' || status < 400 || status > 599) {status = 500}return status}/*** Determine if the response headers have been sent.** @param {object} res* @returns {boolean}* @private*/function headersSent (res) {return typeof res.headersSent !== 'boolean'? Boolean(res._header): res.headersSent}/*** Send response.** @param {IncomingMessage} req* @param {OutgoingMessage} res* @param {number} status* @param {object} headers* @param {string} message* @private*/function send (req, res, status, headers, message) {function write () {// response bodyvar body = createHtmlDocument(message)// response statusres.statusCode = statusres.statusMessage = statuses[status]// response headerssetHeaders(res, headers)// security headersres.setHeader('Content-Security-Policy', "default-src 'self'")res.setHeader('X-Content-Type-Options', 'nosniff')// standard headersres.setHeader('Content-Type', 'text/html; charset=utf-8')res.setHeader('Content-Length', Buffer.byteLength(body, 'utf8'))if (req.method === 'HEAD') {res.end()return}res.end(body, 'utf8')}if (isFinished(req)) {write()return}// unpipe everything from the requestunpipe(req)// flush the requestonFinished(req, write)req.resume()}/*** Set response headers from an object.** @param {OutgoingMessage} res* @param {object} headers* @private*/function setHeaders (res, headers) {if (!headers) {return}var keys = Object.keys(headers)for (var i = 0; i < keys.length; i++) {var key = keys[i]res.setHeader(key, headers[key])}}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。