var http = require('http') // 1. 創建 Server var server = http.createServer() // 2. 監聽 request 請求事件,設置請求處理函數 server.on('request', function (req, res) { console.log('收到請求了,請求路徑是:' + req.url) console.log('請求我的客戶端的地址是:', req.socket.remoteAddress, req.socket.remotePort) // res.write('hello') // res.write(' world') // res.end() // 上面的方式比較麻煩,推薦使用更簡單的方式,直接 end 的同時發送響應數據 // res.end('hello nodejs') // 根據不同的請求路徑發送不同的響應結果 // 1. 獲取請求路徑 // req.url 獲取到的是端口號之后的那一部分路徑 // 也就是說所有的 url 都是以 / 開頭的 // 2. 判斷路徑處理響應 var url = req.url if (url === '/') { res.end('index page') } else if (url === '/login') { res.end('login page') } else if (url === '/products') { var products = [{ name: '蘋果 X', price: 8888 }, { name: '菠蘿 X', price: 5000 }, { name: '小辣椒 X', price: 1999 } ] // 響應內容只能是二進制數據或者字符串 // 數字 // 對象 // 數組 // 布爾值 res.end(JSON.stringify(products)) } else { res.end('404 Not Found.') } }) // 3. 綁定端口號,啟動服務 server.listen(3000, function () { console.log('服務器啟動成功,可以訪問了。。。') })
獲取客戶端ip
socket.remoteAddress
socket.remotePort
// ip 地址用來定位計算機 // 端口號用來定位具體的應用程序 // 所有需要聯網通信的應用程序都會占用一個端口號 var http = require('http') var server = http.createServer() // 2. 監聽 request 請求事件,設置請求處理函數 server.on('request', function (req, res) { console.log('收到請求了,請求路徑是:' + req.url) console.log('請求我的客戶端的地址是:', req.socket.remoteAddress, req.socket.remotePort) res.end('hello nodejs') }) server.listen(5000, function () { console.log('服務器啟動成功,可以訪問了。。。') })
中文亂碼 setHeader
// require // 端口號 var http = require('http') var server = http.createServer() server.on('request', function (req, res) { // 在服務端默認發送的數據,其實是 utf8 編碼的內容 // 但是瀏覽器不知道你是 utf8 編碼的內容 // 瀏覽器在不知道服務器響應內容的編碼的情況下會按照當前操作系統的默認編碼去解析 // 中文操作系統默認是 gbk // 解決方法就是正確的告訴瀏覽器我給你發送的內容是什么編碼的 // 在 http 協議中,Content-Type 就是用來告知對方我給你發送的數據內容是什么類型 // res.setHeader('Content-Type', 'text/plain; charset=utf-8') // res.end('hello 世界') var url = req.url if (url === '/plain') { // text/plain 就是普通文本 res.setHeader('Content-Type', 'text/plain; charset=utf-8') res.end('hello 世界') } else if (url === '/html') { // 如果你發送的是 html 格式的字符串,則也要告訴瀏覽器我給你發送是 text/html 格式的內容 res.setHeader('Content-Type', 'text/html; charset=utf-8') res.end('<p>hello html <a href="">點我</a></p>') } }) server.listen(3000, function () { console.log('Server is running...') })
html + 文件引入
http://tool.oschina.net/commons 查看文件對應類型
// 1. 結合 fs 發送文件中的數據 // 2. Content-Type // http://tool.oschina.net/commons // 不同的資源對應的 Content-Type 是不一樣的 // 圖片不需要指定編碼 // 一般只為字符數據才指定編碼 var http = require('http') var fs = require('fs') var server = http.createServer() server.on('request', function (req, res) { // / index.html var url = req.url if (url === '/') { // 肯定不這么干 // res.end('<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Document</title></head><body><h1>首頁</h1></body>/html>') // 我們要發送的還是在文件中的內容 fs.readFile('./resource/index.html', function (err, data) { if (err) { res.setHeader('Content-Type', 'text/plain; charset=utf-8') res.end('文件讀取失敗,請稍后重試!') } else { // data 默認是二進制數據,可以通過 .toString 轉為咱們能識別的字符串 // res.end() 支持兩種數據類型,一種是二進制,一種是字符串 res.setHeader('Content-Type', 'text/html; charset=utf-8') res.end(data) } }) } else if (url === '/xiaoming') { // url:統一資源定位符 // 一個 url 最終其實是要對應到一個資源的 fs.readFile('./resource/ab2.jpg', function (err, data) { if (err) { res.setHeader('Content-Type', 'text/plain; charset=utf-8') res.end('文件讀取失敗,請稍后重試!') } else { // data 默認是二進制數據,可以通過 .toString 轉為咱們能識別的字符串 // res.end() 支持兩種數據類型,一種是二進制,一種是字符串 // 圖片就不需要指定編碼了,因為我們常說的編碼一般指的是:字符編碼 res.setHeader('Content-Type', 'image/jpeg') res.end(data) } }) } }) server.listen(3000, function () { console.log('Server is running...') })