url里的path和query-http和url模块
var http = require("http"), ???url = require("url"), ???fs = require("fs");s1 = http.createServer(function (req, res) { ???// res.write("<h1>hello yifei</h1>"); ???// res.end(); ???var urlObj = url.parse(req.url, true), ???????pathname = urlObj['pathname'], //path ???????query = urlObj['query']; //?后面的参数 {}类型 ???console.log(pathname); ???console.log(query); ???res.end();//终结请求});s1.listen(1234, function () { ???console.log("http://127.0.0.1:1234?name=maotai&age=22");});
结果
返回html-fs模块
index.html
<!DOCTYPE html><html lang="en"><head> ???<meta charset="UTF-8"> ???<title>test</title> ???<link rel="stylesheet" href="css/base.css"></head><body><h1>用户登录</h1><form action="/add.html" method="get"> ???<p>用户: <input type="text" name="username"></p> ???<p>密码: <input type="text" name="password"></p> ???<p><input type="submit"></p></form></body></html>
css/base.css
body{ ???background-color: #0086b3;}
node代码
var http = require('http'), ???url = require('url'), ???fs = require('fs');s1 = http.createServer(function (req, res) { ???var urlObj = url.parse(req.url, true), ???????pathname = urlObj['pathname'], ???????query = urlObj['query']; ???console.log(pathname, query); ???if (pathname === "/index.html") { ???????var con = fs.readFileSync("./index.html"); //读取html,返回 ???????res.end(con); ???????return; ???} ???if (pathname === "/css/base.css") { //index.html里会调用css ???????con = fs.readFileSync("./css/base.css","utf-8"); ???????res.end(con); ???????return; ???}});s1.listen("1234", function () { ???console.log("http://127.0.0.1:1234/index.html");});
根据pathname返回不通的url
最简陋的实现(如果html不存在会报错)
var http = require("http"), ???url = require("url"), ???fs = require("fs");s1 = http.createServer(function (req, res) { ???var urlObj = url.parse(req.url), ???????pathname = urlObj['pathname'], ???????query = urlObj['query']; ???pathname = "." + pathname; ???var con = fs.readFileSync(pathname); //根据pathname返回不同的url ???res.end(con); ???return; //代表终结});s1.listen(1234, function () { ???console.log("http://127.0.0.1:1234/index.html")});
处理错误
var http = require("http"), ???url = require("url"), ???fs = require("fs");s1 = http.createServer(function (req, res) { ???var urlObj = url.parse(req.url), ???????pathname = urlObj['pathname'], ???????query = urlObj['query']; ???try { ???????var con = fs.readFileSync('.'+pathname); ???????res.end(con); ???} catch (e) { ???????res.end("request file is not fonund!") ???} ???return;});s1.listen(1234, function () { ???console.log("http://127.0.0.1:1234/index.html")});
处理mime
即不通类型不同的显示,如html css
谷歌浏览器会智能处理一些类型.
var http = require('http'), ???url = require('url'), ???fs = require('fs');s1 = http.createServer(function (req, res) { ???var urlObj = url.parse(req.url), ???????pathname = urlObj['pathname'], ???????query = urlObj['query']; ???var reg = /\.(HTML|CSS|JS|JSON|TXT|ICO)/i; ???var suffix = reg.exec(pathname)[1].toUpperCase(); ???var suffixMIME = 'text/plain'; ???if (reg.test(pathname)) { ???????switch (suffix) { ???????????case "HTML": ???????????????suffixMIME = 'text/html'; ???????????????break; ???????????case "JS": ???????????????suffixMIME = 'text/javascript'; ???????????????break; ???????????case "CSS": ???????????????suffixMIME = 'text/css'; ???????????????break; ???????????case "JSON": ???????????????suffixMIME = 'application/json'; ???????????????break; ???????????case "ICO": ???????????????suffixMIME = 'application/octet-stream'; ???????????????break; ???????} ???} ???try { ???????con = fs.readFileSync('.' + pathname); ???????res.writeHead(200, {'content-type': suffixMIME + ';charset=utf-8'}); ???????res.end(con); ???} catch (e) { ???????res.writeHead(404, {'content-type': 'text/plain;charset=utf-8'}); ???????res.end("file not found") ???}});s1.listen(1234, function () { ???console.log("http://127.0.0.1:1234/index.html");});