1.项目目录结构如下
projects1
├─data
│ └─mime.json
├─module
│ └─route.js
├─public
│ └─css
│ └─style.css
└─views
│ └─form.ejs
└─app.js
└─package.json
2.package.json
{
"name" : "project1" ,
"version" : "1.0.0" ,
"description" : "" ,
"main" : "app.js" ,
"scripts" : {
"test" : "echo \"Error: no test specified\" && exit 1"
} ,
"keywords" : [ ] ,
"author" : "" ,
"license" : "ISC" ,
"dependencies" : {
"ejs" : "^3.1.8"
}
}
3.路由添加
const http = require ( "http" ) ;
const app = require ( "./module/route" ) ;
const ejs = require ( "ejs" ) ;
http. createServer ( app) . listen ( 3000 ) ;
app. static ( "./public" ) ;
app. get ( '/' , function ( request, response ) {
response. sent ( '首页' ) ;
} )
app. get ( '/login' , function ( request, response ) {
ejs. renderFile ( './views/form.ejs' , { } , function ( err, data ) {
response. sent ( data) ;
} )
} )
app. post ( '/login' , function ( request, response ) {
console. log ( request. body) ;
response. sent ( ) ;
} )
4.路由封装
const fs = require ( "fs" ) ;
const path = require ( "path" ) ;
const url = require ( "url" ) ;
function extendRsponse ( response ) {
response. sent = ( data ) => {
response. writeHead ( 200 , { 'Content-Type' : 'text/html;charset=utf-8' } ) ;
response. end ( data) ;
}
}
function getFileMime ( endfixName ) {
var data = fs. readFileSync ( "./data/mime.json" ) ;
let mimeObj = JSON . parse ( data. toString ( ) ) ;
return mimeObj[ endfixName]
}
function initStatic ( request, response, staticFilePath ) {
let pathName = url. parse ( request. url) . pathname;
pathName = pathName== '/' ? '/index.html' : pathName
let extName = path. extname ( pathName)
let currentPath = path. join ( staticFilePath, pathName)
try {
var staticFile = fs. readFileSync ( currentPath) ;
let mime = getFileMime ( extName) ;
response. writeHead ( 200 , { 'Content-Type' : mime + '; charset=utf-8' } ) ;
response. end ( staticFile) ;
return true ;
} catch ( error) {
console. log ( ` ${ currentPath} 文件不存在 ` ) ;
return false ;
}
}
let server = ( ) => {
let G = {
_get : { } ,
_post : { } ,
staticPath : 'static'
} ;
let app = function ( request, response ) {
extendRsponse ( response) ;
var reslut = initStatic ( request, response, G . staticPath) ;
let pathname = url. parse ( request. url) . pathname
let method = request. method. toLowerCase ( ) ;
if ( G [ '_' + method] [ pathname] ) {
if ( method == "get" ) {
G . _get[ pathname] ( request, response) ;
} else {
let postData = '' ;
request. on ( 'data' , ( chunk ) => {
postData += chunk;
} ) ;
request. on ( 'end' , ( ) => {
console. log ( postData) ;
response. end ( postData) ;
request. body = postData;
G . _post[ pathname] ( request, response) ;
} )
}
} else {
if ( ! reslut) {
response. writeHead ( 404 , { 'Content-Type' : 'text/plain;charset=utf-8' } ) ;
response. end ( '页面不存在' ) ;
}
}
}
app. get = function ( path, callback ) {
G . _get[ path] = callback;
}
app. post = function ( path, callback ) {
G . _post[ path] = callback;
}
app. static = function ( staticPath ) {
G . staticPath = staticPath;
}
return app;
}
module. exports= server ( ) ;
5.登录form表单
<! DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< meta name = " viewport" content = " width=device-width, initial-scale=1.0" >
< link rel = " stylesheet" href = " ./css/style.css" >
< title> 登录</ title>
</ head>
< body>
< h2> 登录界面</ h2>
< form action = " /login" method = " post" >
用户名:< input type = " text" , name = " username" /> < br>
密码:< input type = " password" , name = " password" /> < br>
< input type = " submit" , value = " 提交" >
</ form>
</ body>
</ html>
6.CSS样式
h2 {
color : red;
}
7.Content-Type
类型
{ ".323" : "text/h323" ,
".3gp" : "video/3gpp" ,
".aab" : "application/x-authoware-bin" ,
".aam" : "application/x-authoware-map" ,
".aas" : "application/x-authoware-seg" ,
".acx" : "application/internet-property-stream" ,
".ai" : "application/postscript" ,
".aif" : "audio/x-aiff" ,
".aifc" : "audio/x-aiff" ,
".aiff" : "audio/x-aiff" ,
".als" : "audio/X-Alpha5" ,
".amc" : "application/x-mpeg" ,
".ani" : "application/octet-stream" ,
".apk" : "application/vnd.android.package-archive" ,
".asc" : "text/plain" ,
".asd" : "application/astound" ,
".asf" : "video/x-ms-asf" ,
".asn" : "application/astound" ,
".asp" : "application/x-asap" ,
".asr" : "video/x-ms-asf" ,
".asx" : "video/x-ms-asf" ,
".au" : "audio/basic" ,
".avb" : "application/octet-stream" ,
".avi" : "video/x-msvideo" ,
".awb" : "audio/amr-wb" ,
".axs" : "application/olescript" ,
".bas" : "text/plain" ,
".bcpio" : "application/x-bcpio" ,
".bin " : "application/octet-stream" ,
".bld" : "application/bld" ,
".bld2" : "application/bld2" ,
".bmp" : "image/bmp" ,
".bpk" : "application/octet-stream" ,
".bz2" : "application/x-bzip2" ,
".c" : "text/plain" ,
".cal" : "image/x-cals" ,
".cat" : "application/vnd.ms-pkiseccat" ,
".ccn" : "application/x-cnc" ,
".cco" : "application/x-cocoa" ,
".cdf" : "application/x-cdf" ,
".cer" : "application/x-x509-ca-cert" ,
".cgi" : "magnus-internal/cgi" ,
".chat" : "application/x-chat" ,
".class" : "application/octet-stream" ,
".clp" : "application/x-msclip" ,
".cmx" : "image/x-cmx" ,
".co" : "application/x-cult3d-object" ,
".cod" : "image/cis-cod" ,
".conf" : "text/plain" ,
".cpio" : "application/x-cpio" ,
".cpp" : "text/plain" ,
".cpt" : "application/mac-compactpro" ,
".crd" : "application/x-mscardfile" ,
".crl" : "application/pkix-crl" ,
".crt" : "application/x-x509-ca-cert" ,
".csh" : "application/x-csh" ,
".csm" : "chemical/x-csml" ,
".csml" : "chemical/x-csml" ,
".css" : "text/css" ,
".cur" : "application/octet-stream" ,
".dcm" : "x-lml/x-evm" ,
".dcr" : "application/x-director" ,
".dcx" : "image/x-dcx" ,
".der" : "application/x-x509-ca-cert" ,
".dhtml" : "text/html" ,
".dir" : "application/x-director" ,
".dll" : "application/x-msdownload" ,
".dmg" : "application/octet-stream" ,
".dms" : "application/octet-stream" ,
".doc" : "application/msword" ,
".docx" : "application/vnd.openxmlformats-officedocument.wordprocessingml.document" ,
".dot" : "application/msword" ,
".dvi" : "application/x-dvi" ,
".dwf" : "drawing/x-dwf" ,
".dwg" : "application/x-autocad" ,
".dxf" : "application/x-autocad" ,
".dxr" : "application/x-director" ,
".ebk" : "application/x-expandedbook" ,
".emb" : "chemical/x-embl-dl-nucleotide" ,
".embl" : "chemical/x-embl-dl-nucleotide" ,
".eps" : "application/postscript" ,
".epub" : "application/epub+zip" ,
".eri" : "image/x-eri" ,
".es" : "audio/echospeech" ,
".esl" : "audio/echospeech" ,
".etc" : "application/x-earthtime" ,
".etx" : "text/x-setext" ,
".evm" : "x-lml/x-evm" ,
".evy" : "application/envoy" ,
".exe" : "application/octet-stream" ,
".fh4" : "image/x-freehand" ,
".fh5" : "image/x-freehand" ,
".fhc" : "image/x-freehand" ,
".fif" : "application/fractals" ,
".flr" : "x-world/x-vrml" ,
".flv" : "flv-application/octet-stream" ,
".fm" : "application/x-maker" ,
".fpx" : "image/x-fpx" ,
".fvi" : "video/isivideo" ,
".gau" : "chemical/x-gaussian-input" ,
".gca" : "application/x-gca-compressed" ,
".gdb" : "x-lml/x-gdb" ,
".gif" : "image/gif" ,
".gps" : "application/x-gps" ,
".gtar" : "application/x-gtar" ,
".gz" : "application/x-gzip" ,
".h" : "text/plain" ,
".hdf" : "application/x-hdf" ,
".hdm" : "text/x-hdml" ,
".hdml" : "text/x-hdml" ,
".hlp" : "application/winhlp" ,
".hqx" : "application/mac-binhex40" ,
".hta" : "application/hta" ,
".htc" : "text/x-component" ,
".htm" : "text/html" ,
".html" : "text/html" ,
".hts" : "text/html" ,
".htt" : "text/webviewhtml" ,
".ice" : "x-conference/x-cooltalk" ,
".ico" : "image/x-icon" ,
".ief" : "image/ief" ,
".ifm" : "image/gif" ,
".ifs" : "image/ifs" ,
".iii" : "application/x-iphone" ,
".imy" : "audio/melody" ,
".ins" : "application/x-internet-signup" ,
".ips" : "application/x-ipscript" ,
".ipx" : "application/x-ipix" ,
".isp" : "application/x-internet-signup" ,
".it" : "audio/x-mod" ,
".itz" : "audio/x-mod" ,
".ivr" : "i-world/i-vrml" ,
".j2k" : "image/j2k" ,
".jad" : "text/vnd.sun.j2me.app-descriptor" ,
".jam" : "application/x-jam" ,
".jar" : "application/java-archive" ,
".java" : "text/plain" ,
".jfif" : "image/pipeg" ,
".jnlp" : "application/x-java-jnlp-file" ,
".jpe" : "image/jpeg" ,
".jpeg" : "image/jpeg" ,
".jpg" : "image/jpeg" ,
".jpz" : "image/jpeg" ,
".js" : "application/x-javascript" ,
".jwc" : "application/jwc" ,
".kjx" : "application/x-kjx" ,
".lak" : "x-lml/x-lak" ,
".latex" : "application/x-latex" ,
".lcc" : "application/fastman" ,
".lcl" : "application/x-digitalloca" ,
".lcr" : "application/x-digitalloca" ,
".lgh" : "application/lgh" ,
".lha" : "application/octet-stream" ,
".lml" : "x-lml/x-lml" ,
".lmlpack" : "x-lml/x-lmlpack" ,
".log" : "text/plain" ,
".lsf" : "video/x-la-asf" ,
".lsx" : "video/x-la-asf" ,
".lzh" : "application/octet-stream" ,
".m13" : "application/x-msmediaview" ,
".m14" : "application/x-msmediaview" ,
".m15" : "audio/x-mod" ,
".m3u" : "audio/x-mpegurl" ,
".m3url" : "audio/x-mpegurl" ,
".m4a" : "audio/mp4a-latm" ,
".m4b" : "audio/mp4a-latm" ,
".m4p" : "audio/mp4a-latm" ,
".m4u" : "video/vnd.mpegurl" ,
".m4v" : "video/x-m4v" ,
".ma1" : "audio/ma1" ,
".ma2" : "audio/ma2" ,
".ma3" : "audio/ma3" ,
".ma5" : "audio/ma5" ,
".man" : "application/x-troff-man" ,
".map" : "magnus-internal/imagemap" ,
".mbd" : "application/mbedlet" ,
".mct" : "application/x-mascot" ,
".mdb" : "application/x-msaccess" ,
".mdz" : "audio/x-mod" ,
".me" : "application/x-troff-me" ,
".mel" : "text/x-vmel" ,
".mht" : "message/rfc822" ,
".mhtml" : "message/rfc822" ,
".mi" : "application/x-mif" ,
".mid" : "audio/mid" ,
".midi" : "audio/midi" ,
".mif" : "application/x-mif" ,
".mil" : "image/x-cals" ,
".mio" : "audio/x-mio" ,
".mmf" : "application/x-skt-lbs" ,
".mng" : "video/x-mng" ,
".mny" : "application/x-msmoney" ,
".moc" : "application/x-mocha" ,
".mocha" : "application/x-mocha" ,
".mod" : "audio/x-mod" ,
".mof" : "application/x-yumekara" ,
".mol" : "chemical/x-mdl-molfile" ,
".mop" : "chemical/x-mopac-input" ,
".mov" : "video/quicktime" ,
".movie" : "video/x-sgi-movie" ,
".mp2" : "video/mpeg" ,
".mp3" : "audio/mpeg" ,
".mp4" : "video/mp4" ,
".mpa" : "video/mpeg" ,
".mpc" : "application/vnd.mpohun.certificate" ,
".mpe" : "video/mpeg" ,
".mpeg" : "video/mpeg" ,
".mpg" : "video/mpeg" ,
".mpg4" : "video/mp4" ,
".mpga" : "audio/mpeg" ,
".mpn" : "application/vnd.mophun.application" ,
".mpp" : "application/vnd.ms-project" ,
".mps" : "application/x-mapserver" ,
".mpv2" : "video/mpeg" ,
".mrl" : "text/x-mrml" ,
".mrm" : "application/x-mrm" ,
".ms" : "application/x-troff-ms" ,
".msg" : "application/vnd.ms-outlook" ,
".mts" : "application/metastream" ,
".mtx" : "application/metastream" ,
".mtz" : "application/metastream" ,
".mvb" : "application/x-msmediaview" ,
".mzv" : "application/metastream" ,
".nar" : "application/zip" ,
".nbmp" : "image/nbmp" ,
".nc" : "application/x-netcdf" ,
".ndb" : "x-lml/x-ndb" ,
".ndwn" : "application/ndwn" ,
".nif" : "application/x-nif" ,
".nmz" : "application/x-scream" ,
".nokia-op-logo" : "image/vnd.nok-oplogo-color" ,
".npx" : "application/x-netfpx" ,
".nsnd" : "audio/nsnd" ,
".nva" : "application/x-neva1" ,
".nws" : "message/rfc822" ,
".oda" : "application/oda" ,
".ogg" : "audio/ogg" ,
".oom" : "application/x-AtlasMate-Plugin" ,
".p10" : "application/pkcs10" ,
".p12" : "application/x-pkcs12" ,
".p7b" : "application/x-pkcs7-certificates" ,
".p7c" : "application/x-pkcs7-mime" ,
".p7m" : "application/x-pkcs7-mime" ,
".p7r" : "application/x-pkcs7-certreqresp" ,
".p7s" : "application/x-pkcs7-signature" ,
".pac" : "audio/x-pac" ,
".pae" : "audio/x-epac" ,
".pan" : "application/x-pan" ,
".pbm" : "image/x-portable-bitmap" ,
".pcx" : "image/x-pcx" ,
".pda" : "image/x-pda" ,
".pdb" : "chemical/x-pdb" ,
".pdf" : "application/pdf" ,
".pfr" : "application/font-tdpfr" ,
".pfx" : "application/x-pkcs12" ,
".pgm" : "image/x-portable-graymap" ,
".pict" : "image/x-pict" ,
".pko" : "application/ynd.ms-pkipko" ,
".pm" : "application/x-perl" ,
".pma" : "application/x-perfmon" ,
".pmc" : "application/x-perfmon" ,
".pmd" : "application/x-pmd" ,
".pml" : "application/x-perfmon" ,
".pmr" : "application/x-perfmon" ,
".pmw" : "application/x-perfmon" ,
".png" : "image/png" ,
".pnm" : "image/x-portable-anymap" ,
".pnz" : "image/png" ,
".pot," : "application/vnd.ms-powerpoint" ,
".ppm" : "image/x-portable-pixmap" ,
".pps" : "application/vnd.ms-powerpoint" ,
".ppt" : "application/vnd.ms-powerpoint" ,
".pptx" : "application/vnd.openxmlformats-officedocument.presentationml.presentation" ,
".pqf" : "application/x-cprplayer" ,
".pqi" : "application/cprplayer" ,
".prc" : "application/x-prc" ,
".prf" : "application/pics-rules" ,
".prop" : "text/plain" ,
".proxy" : "application/x-ns-proxy-autoconfig" ,
".ps" : "application/postscript" ,
".ptlk" : "application/listenup" ,
".pub" : "application/x-mspublisher" ,
".pvx" : "video/x-pv-pvx" ,
".qcp" : "audio/vnd.qcelp" ,
".qt" : "video/quicktime" ,
".qti" : "image/x-quicktime" ,
".qtif" : "image/x-quicktime" ,
".r3t" : "text/vnd.rn-realtext3d" ,
".ra" : "audio/x-pn-realaudio" ,
".ram" : "audio/x-pn-realaudio" ,
".rar" : "application/octet-stream" ,
".ras" : "image/x-cmu-raster" ,
".rc" : "text/plain" ,
".rdf" : "application/rdf+xml" ,
".rf" : "image/vnd.rn-realflash" ,
".rgb" : "image/x-rgb" ,
".rlf" : "application/x-richlink" ,
".rm" : "audio/x-pn-realaudio" ,
".rmf" : "audio/x-rmf" ,
".rmi" : "audio/mid" ,
".rmm" : "audio/x-pn-realaudio" ,
".rmvb" : "audio/x-pn-realaudio" ,
".rnx" : "application/vnd.rn-realplayer" ,
".roff" : "application/x-troff" ,
".rp" : "image/vnd.rn-realpix" ,
".rpm" : "audio/x-pn-realaudio-plugin" ,
".rt" : "text/vnd.rn-realtext" ,
".rte" : "x-lml/x-gps" ,
".rtf" : "application/rtf" ,
".rtg" : "application/metastream" ,
".rtx" : "text/richtext" ,
".rv" : "video/vnd.rn-realvideo" ,
".rwc" : "application/x-rogerwilco" ,
".s3m" : "audio/x-mod" ,
".s3z" : "audio/x-mod" ,
".sca" : "application/x-supercard" ,
".scd" : "application/x-msschedule" ,
".sct" : "text/scriptlet" ,
".sdf" : "application/e-score" ,
".sea" : "application/x-stuffit" ,
".setpay" : "application/set-payment-initiation" ,
".setreg" : "application/set-registration-initiation" ,
".sgm" : "text/x-sgml" ,
".sgml" : "text/x-sgml" ,
".sh" : "application/x-sh" ,
".shar" : "application/x-shar" ,
".shtml" : "magnus-internal/parsed-html" ,
".shw" : "application/presentations" ,
".si6" : "image/si6" ,
".si7" : "image/vnd.stiwap.sis" ,
".si9" : "image/vnd.lgtwap.sis" ,
".sis" : "application/vnd.symbian.install" ,
".sit" : "application/x-stuffit" ,
".skd" : "application/x-Koan" ,
".skm" : "application/x-Koan" ,
".skp" : "application/x-Koan" ,
".skt" : "application/x-Koan" ,
".slc" : "application/x-salsa" ,
".smd" : "audio/x-smd" ,
".smi" : "application/smil" ,
".smil" : "application/smil" ,
".smp" : "application/studiom" ,
".smz" : "audio/x-smd" ,
".snd" : "audio/basic" ,
".spc" : "application/x-pkcs7-certificates" ,
".spl" : "application/futuresplash" ,
".spr" : "application/x-sprite" ,
".sprite" : "application/x-sprite" ,
".sdp" : "application/sdp" ,
".spt" : "application/x-spt" ,
".src" : "application/x-wais-source" ,
".sst" : "application/vnd.ms-pkicertstore" ,
".stk" : "application/hyperstudio" ,
".stl" : "application/vnd.ms-pkistl" ,
".stm" : "text/html" ,
".svg" : "image/svg+xml" ,
".sv4cpio" : "application/x-sv4cpio" ,
".sv4crc" : "application/x-sv4crc" ,
".svf" : "image/vnd" ,
".svg" : "image/svg+xml" ,
".svh" : "image/svh" ,
".svr" : "x-world/x-svr" ,
".swf" : "application/x-shockwave-flash" ,
".swfl" : "application/x-shockwave-flash" ,
".t" : "application/x-troff" ,
".tad" : "application/octet-stream" ,
".talk" : "text/x-speech" ,
".tar" : "application/x-tar" ,
".taz" : "application/x-tar" ,
".tbp" : "application/x-timbuktu" ,
".tbt" : "application/x-timbuktu" ,
".tcl" : "application/x-tcl" ,
".tex" : "application/x-tex" ,
".texi" : "application/x-texinfo" ,
".texinfo" : "application/x-texinfo" ,
".tgz" : "application/x-compressed" ,
".thm" : "application/vnd.eri.thm" ,
".tif" : "image/tiff" ,
".tiff" : "image/tiff" ,
".tki" : "application/x-tkined" ,
".tkined" : "application/x-tkined" ,
".toc" : "application/toc" ,
".toy" : "image/toy" ,
".tr" : "application/x-troff" ,
".trk" : "x-lml/x-gps" ,
".trm" : "application/x-msterminal" ,
".tsi" : "audio/tsplayer" ,
".tsp" : "application/dsptype" ,
".tsv" : "text/tab-separated-values" ,
".ttf" : "application/octet-stream" ,
".ttz" : "application/t-time" ,
".txt" : "text/plain" ,
".uls" : "text/iuls" ,
".ult" : "audio/x-mod" ,
".ustar" : "application/x-ustar" ,
".uu" : "application/x-uuencode" ,
".uue" : "application/x-uuencode" ,
".vcd" : "application/x-cdlink" ,
".vcf" : "text/x-vcard" ,
".vdo" : "video/vdo" ,
".vib" : "audio/vib" ,
".viv" : "video/vivo" ,
".vivo" : "video/vivo" ,
".vmd" : "application/vocaltec-media-desc" ,
".vmf" : "application/vocaltec-media-file" ,
".vmi" : "application/x-dreamcast-vms-info" ,
".vms" : "application/x-dreamcast-vms" ,
".vox" : "audio/voxware" ,
".vqe" : "audio/x-twinvq-plugin" ,
".vqf" : "audio/x-twinvq" ,
".vql" : "audio/x-twinvq" ,
".vre" : "x-world/x-vream" ,
".vrml" : "x-world/x-vrml" ,
".vrt" : "x-world/x-vrt" ,
".vrw" : "x-world/x-vream" ,
".vts" : "workbook/formulaone" ,
".wav" : "audio/x-wav" ,
".wax" : "audio/x-ms-wax" ,
".wbmp" : "image/vnd.wap.wbmp" ,
".wcm" : "application/vnd.ms-works" ,
".wdb" : "application/vnd.ms-works" ,
".web" : "application/vnd.xara" ,
".wi" : "image/wavelet" ,
".wis" : "application/x-InstallShield" ,
".wks" : "application/vnd.ms-works" ,
".wm" : "video/x-ms-wm" ,
".wma" : "audio/x-ms-wma" ,
".wmd" : "application/x-ms-wmd" ,
".wmf" : "application/x-msmetafile" ,
".wml" : "text/vnd.wap.wml" ,
".wmlc" : "application/vnd.wap.wmlc" ,
".wmls" : "text/vnd.wap.wmlscript" ,
".wmlsc" : "application/vnd.wap.wmlscriptc" ,
".wmlscript" : "text/vnd.wap.wmlscript" ,
".wmv" : "audio/x-ms-wmv" ,
".wmx" : "video/x-ms-wmx" ,
".wmz" : "application/x-ms-wmz" ,
".wpng" : "image/x-up-wpng" ,
".wps" : "application/vnd.ms-works" ,
".wpt" : "x-lml/x-gps" ,
".wri" : "application/x-mswrite" ,
".wrl" : "x-world/x-vrml" ,
".wrz" : "x-world/x-vrml" ,
".ws" : "text/vnd.wap.wmlscript" ,
".wsc" : "application/vnd.wap.wmlscriptc" ,
".wv" : "video/wavelet" ,
".wvx" : "video/x-ms-wvx" ,
".wxl" : "application/x-wxl" ,
".x-gzip" : "application/x-gzip" ,
".xaf" : "x-world/x-vrml" ,
".xar" : "application/vnd.xara" ,
".xbm" : "image/x-xbitmap" ,
".xdm" : "application/x-xdma" ,
".xdma" : "application/x-xdma" ,
".xdw" : "application/vnd.fujixerox.docuworks" ,
".xht" : "application/xhtml+xml" ,
".xhtm" : "application/xhtml+xml" ,
".xhtml" : "application/xhtml+xml" ,
".xla" : "application/vnd.ms-excel" ,
".xlc" : "application/vnd.ms-excel" ,
".xll" : "application/x-excel" ,
".xlm" : "application/vnd.ms-excel" ,
".xls" : "application/vnd.ms-excel" ,
".xlsx" : "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" ,
".xlt" : "application/vnd.ms-excel" ,
".xlw" : "application/vnd.ms-excel" ,
".xm" : "audio/x-mod" ,
".xml" : "text/plain" ,
".xml" : "application/xml" ,
".xmz" : "audio/x-mod" ,
".xof" : "x-world/x-vrml" ,
".xpi" : "application/x-xpinstall" ,
".xpm" : "image/x-xpixmap" ,
".xsit" : "text/xml" ,
".xsl" : "text/xml" ,
".xul" : "text/xul" ,
".xwd" : "image/x-xwindowdump" ,
".xyz" : "chemical/x-pdb" ,
".yz1" : "application/x-yz1" ,
".z" : "application/x-compress" ,
".zac" : "application/x-zaurus-zac" ,
".zip" : "application/zip" ,
".json" : "application/json"
}