//用 http 模塊建立服務 http.createServer(function(req,res){ // 發送 HTTP 頭部 // HTTP 狀態值: 200 : OK //設置 HTTP 頭部,狀態碼是 200,文件類型是 html,字符集是 utf-8 res.writeHead(200,{"Content-Type":"text/html;charset='utf-8'"}); res.write('你好 nodejs'); res.write('我是第一個 nodejs 程序'); res.end(); /*結束響應*/ }).listen(8001);
Web 服務器通常指網站服務器,是指駐留於因特網上某種類型計算機的程序,能夠向瀏覽
器等 Web 客戶端提供文檔, 也能夠放置網站文件,讓全世界瀏覽;能夠放置數據文件,讓
全世界下載。目前最主流的三個 Web 服務器是 Apache Nginx IIS。 javascript
目錄結構css
`01 services1.js`代碼html
// 引入模塊 var http = require('http'); // fs 模塊 var fs =require('fs'); http.createServer(function (req, res) { //http://localhost:8001/news.html /news.html //http://localhost:8001/index.html /index.html //css/dmb.bottom.css var pathname =req.url; //路由分發 if (pathname==='/'){ pathname ='/index.html'; } if (pathname!=='/favicon.ico'){ console.log(pathname); fs.readFile('static'+pathname,function (err, data) { if (err){ console.log('404'); }else{ res.writeHead(200,{"Content-Type":"text/html;charset='utf-8'"}) res.write(data); res.end() } }) } console.log(pathname); }).listen(8001);
`02 services2.js`java
// 引入模塊 var http = require('http'); // fs 模塊 var fs =require('fs'); // path模塊 var path = require('path'); // 自定義模塊 var mimeModel =require('./model/getmime.js'); http.createServer(function (req, res) { //http://localhost:8001/news.html /news.html //http://localhost:8001/index.html /index.html //css/dmb.bottom.css var pathname =req.url; //路由分發 if (pathname==='/'){ pathname ='/index.html'; } // 獲取後綴名 var extname = path.extname(pathname); if (pathname!=='/favicon.ico'){ /*過濾請求 favicon.ico*/ //console.log(pathname); //文件操做獲取 static 目錄下的 index.html 文件 fs.readFile('static'+pathname,function (err, data) { if (err){ console.log('404'); fs.readFile('static/404.html',function (err, data404) { if (err){ console.log(err); } res.writeHead('404',{"Content-Type":"text/html;charset='utf-8'"}); res.write(data404); res.end() }) }else{//返回文件 // 獲取文件類型 var mine = mimeModel.getMime(extname); res.writeHead(200,{"Content-Type":mine+";charset='utf-8'"}); res.write(data); res.end() } }) } console.log(pathname); }).listen(8001);
`model/getmime.js`node
/** * Created by Administrator on 2017/7/2 0002. */ exports.getMime=function (extname) { /*獲取後綴名*/ switch (extname) { case '.html': return 'text/html'; case '.css': return 'text/css'; case '.js': return 'text/javascript'; default: return 'text/html'; } };
web
exports.getMine = function (fs, extname) { //.html console.log('1'); fs.readFile('mime.json',function (err, data) { console.log('fs.readFile:','2'); if (err){ console.log('../mine.josn文件不存在'); console.log(err); return false } var Mines = JSON.parse(data.toString()); return Mines[extname] || 'text/html' //默認返回'text/html' }); console.log('3') };
03 services.js
代碼json
// fs 模塊 var fs =require('fs'); // path模塊 var path = require('path'); // 自定義模塊 var mimeModel =require('./model/getmimefromfile.js'); console.log("mimeModel.getMine(fs, '.html'):",mimeModel.getMine(fs, '.html'));
執行結果服務器
緣由分析:異步
1 fs.readFile 屬於異步方法,顧程序執行到 fs.readFile ,不等待執行結果,就直接往下執行,最後返回undefiled.網站
解決辦法: fs.readFile 改爲 fs.readFileSync
exports.getMine = function (fs, extname) { //.html //把讀取數據改爲同步 var data = fs.readFileSync('mime.json'); //data.toString() 轉換成json字符串 var Mimes = JSON.parse(data.toString()); /*把json字符串轉換成json對象*/ return Mimes[extname] || 'text/html'; };
`04.services4.js`
// 引入模塊 var http = require('http'); // fs 模塊 var fs =require('fs'); // path模塊 var path = require('path'); // url 模塊 var url = require('url'); // 自定義模塊 var mimeModel =require('./model/getmimefromfile.js'); http.createServer(function (req, res) { //http://localhost:8001/news.html /news.html //http://localhost:8001/index.html /index.html //css/dmb.bottom.css // 只獲取路徑,不攜帶參數 var pathname =url.parse(req.url).pathname; //路由分發 if (pathname==='/'){ pathname ='/index.html'; } // 獲取後綴名 var extname = path.extname(pathname); if (pathname!=='/favicon.ico'){ /*過濾請求 favicon.ico*/ //console.log(pathname); //文件操做獲取 static 目錄下的 index.html 文件 fs.readFile('static'+pathname,function (err, data) { if (err){ console.log('404'); fs.readFile('static/404.html',function (err, data404) { if (err){ console.log(err); } res.writeHead('404',{"Content-Type":"text/html;charset='utf-8'"}); res.write(data404); res.end() }) }else{//返回文件 // 獲取文件類型 var mine = mimeModel.getMine(fs,extname); res.writeHead(200,{"Content-Type":mine+";charset='utf-8'"}); res.write(data); res.end() } }) } console.log(pathname); }).listen(8001);
`model/getmimefromfile.js`
exports.getMine = function (fs, extname) { //.html //把讀取數據改爲同步 var data = fs.readFileSync('./mime.json'); //data.toString() 轉換成json字符串 var Mimes = JSON.parse(data.toString()); /*把json字符串轉換成json對象*/ return Mimes[extname] || 'text/html'; };