基於nodejs做一個簡單的http/web伺服器
阿新 • • 發佈:2018-12-12
建立專案環境,執行下面的命令
cd d:
mkdir webapp
cd webapp
npm install http
npm install fs
npm install querystring
目錄結構
服務端程式碼
app.js
/** * web服務 * request 請求資料 * respond 響應資料 */ const http = require('http'); const method = require('./method'); http.createServer((request, respond) => { /** * * 根據http 訊息結構 * 該處可以自定義結構資料 也可以預設 * */ method[request.method](request, respond); }).listen(3000, function () { console.log('監聽埠:%s', 3000); });
method.js
/**
*
* 方法回撥物件
* 根據http1.1定義的方法寫 可以自定義請求方法
*
* MYMETHOD:自定義請求方法
*
*/
const fuc = require("./fuc");
module.exports = {
GET: fuc.getFuc,
POST: fuc.postFuc,
HEAD: fuc.headFuc,
MYMETHOD: fuc.mymethodFuc
}
fuc.js
/** * * 根據不同請求方法做不同的處理 * */ const url = require('url'); const querystring = require('querystring'); const getData = require('./data'); const route = require('./route'); module.exports = { getFuc: (req, res) => { const requestData = url.parse(req.url, true); /** * 預設 */ if (requestData.pathname === '/') { requestData.pathname = route.index } return getData.data(requestData, res); }, postFuc: (req, res) => { const requestData = url.parse(req.url, true); var params = ''; req.on('data', (chunk) => { params += chunk; }) req.on('end', () => { params = querystring.parse(params); return getData.data(requestData, res); }) }, headFuc: (req, res) => { }, mymethodFuc: (req, res) => { }, }
data.js
/** * * 獲取客服端請求 伺服器返回相應資料 * * */ const fs=require('fs'); module.exports = { data: (req, res) => { fs.exists(__dirname.concat(req.pathname), (isexists) => { if (isexists) { var buf = new Buffer.alloc(10240); fs.open(__dirname.concat(req.pathname), 'r+', function (err, fd) { if (err) { return console.error(err); } fs.read(fd, buf, 0, buf.length, 0, function (err, bytes) { if (err) { res.writeHead(500); res.end(); } if (bytes > 0) { res.end(buf.slice(0, bytes).toString()); } }); }); } else { res.writeHead(404); res.end(); } }) } }
上面程式碼完成就 在終端執行node app.js
至此一個簡單的web服務就搭建完了。