title: node.js Server
date: 2018-03-14 00.00.00
tags: Server client 請求 響應(yīng)
腳本建Server
用什么腳本建服務(wù)器
- 用腳本就可以提供 HTTP 服務(wù),不管是 Bash 腳本還是 Node.js 腳本都可以。
- 由于 Bash 腳本的語法實(shí)在是反人類,而且我們今后要學(xué)習(xí) JavaScript,所以我們先用 Node.js 腳本試試水吧。
- 建成的服務(wù)器就是我們的電腦,沒錢買服務(wù)器,窮逼的我們就用電腦做服務(wù)器實(shí)驗(yàn)吧,哈哈哈
創(chuàng)建node.js Server腳本
- 用bush命令操作,進(jìn)個自己認(rèn)為安全好用的目錄
- 創(chuàng)建文件
touch server.js,將以下內(nèi)容加入:
var http = require('http')
var fs = require('fs')
var url = require('url')
var port = process.argv[2]
if(!port){
console.log('請指定端口號好不啦?\nnode server.js 8888 這樣不會嗎?')
process.exit(1)
}
var server = http.createServer(function(request, response){
var parsedUrl = url.parse(request.url, true)
var path = request.url
var query = ''
if(path.indexOf('?') >= 0){ query = path.substring(path.indexOf('?')) }
var pathNoQuery = parsedUrl.pathname
var queryObject = parsedUrl.query
var method = request.method
/******** 從這里開始看,上面不要看 ************/
console.log('HTTP 路徑為\n' + path)
if(path == '/style.css'){
response.setHeader('Content-Type', 'text/css; charset=utf-8')
response.write('body{background-color: #ddd;}h1{color: red;}p{color: green;}')
response.end()
}else if(path == '/main.js'){
response.setHeader('Content-Type', 'text/javascript; charset=utf-8')
response.write('alert("這是JS執(zhí)行的")')
response.end()
}else if(path == '/'){
response.setHeader('Content-Type', 'text/html; charset=utf-8')
response.write('<!DOCTYPE>\n<html>' +
'<head><link rel="stylesheet" href="/style.css">' +
'</head><body>' +
'<h1>你好</h1>' +
'<p>這里是你訪問到的內(nèi)容,字體的顏色為你訪問到的css添加</p>'+
'<script src="/main.js"></script>' +
'</body></html>')
response.end()
}else{
response.statusCode = 404
response.end()
}
/******** 代碼結(jié)束,下面不要看 ************/
})
server.listen(port)
console.log('監(jiān)聽 ' + port + ' 成功\n請用在空中轉(zhuǎn)體720度然后用電飯煲打開 http://localhost:' + port)
- 運(yùn)行
node server.js,如果開始創(chuàng)建文件沒有加后綴就運(yùn)行node server,會看到報(bào)錯
image
沒有監(jiān)聽端口那我們就node server 8888 - 成功之后,這個 server 會保持運(yùn)行(相當(dāng)于服務(wù)器開始運(yùn)行了,可以接受請求了),無法退出
- 如果你想「中斷」這個 server,按 <kb>Ctrl</kbd> + <kbd>C</kbd> 即可(C 就是 Cancel 的意思)
- 中斷后你才能輸入其他命令
- 我建議你把這個 server 放在那里別動,新開一個 Bash 窗口,完成下面的教程
服務(wù)器當(dāng)前的功能
- 這個服務(wù)器目前只有一個功能,那就是打印出路徑
- 缺少一個重要的功能,那就是發(fā)出 HTTP 響應(yīng)
發(fā)送請求
- 使用bush 或者 瀏覽器 向我們這個服務(wù)器發(fā)起請求 ,那么服務(wù)器的地址是什么?
服務(wù)器的地址當(dāng)然就是我們的本地地址啦 ,
http://127.0.0.1或者http://localhost發(fā)起訪問: 報(bào)錯
image
- 我們還是忘記了,http 訪問 必須 IP + 端口號 ,所以,我們重新訪問
http://127.0.0.1:8888
image
服務(wù)器響應(yīng)
可以看到服務(wù)器響應(yīng)給我們了一個頁面, 有HTML內(nèi)容的顯示,css樣式的加持,JS動態(tài)的彈窗
- 同時 服務(wù)器打印出請求的路徑
image
我們需要知道的
response.setHeader('Content-Type', 'text/css; charset=utf-8') //設(shè)置響應(yīng)內(nèi)容的類型,以及響應(yīng)內(nèi)容的編碼方式,返回 //css文件
response.setHeader('Content-Type', 'text/javascript; charset=utf-8') //返回js文件
response.setHeader('Content-Type', 'text/html; charset=utf-8') //返回html文件
response.statusCode = 404 //返回狀態(tài)碼
response.write('Hi') //響應(yīng)內(nèi)容
response.end() //響應(yīng)結(jié)束



