亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

原生NodeJs制作一個簡易聊天室

Original 2016-11-07 15:47:03 528
abstract:準(zhǔn)備工作安裝NodeJs環(huán)境安裝編譯器Sublime如果網(wǎng)速不理想,可以百度一下如何加快npm的速度~使用node搭建一個簡單的網(wǎng)站后臺做完準(zhǔn)備工作之后,新建文件夾chatroom,在chatroom中打開cmd,在控制臺輸出npm init。進(jìn)行設(shè)置,得到package.json文件{   "name": "chatroom"

準(zhǔn)備工作

安裝NodeJs環(huán)境

安裝編譯器Sublime

如果網(wǎng)速不理想,可以百度一下如何加快npm的速度~

使用node搭建一個簡單的網(wǎng)站后臺

做完準(zhǔn)備工作之后,新建文件夾chatroom,在chatroom中打開cmd,在控制臺輸出npm init。進(jìn)行設(shè)置,得到package.json文件

{
  "name": "chatroom",
  "version": "1.0.0",
  "description": "multiroom chat server",
  "main": "app.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [
    "chatroom"
  ],
  "author": "yyg",
  "license": "ISC",
}

安裝socket.io以及mime。執(zhí)行如下代碼:

npm install socket.io --save-dev
npm install mime --save-dev

這里 mime 模塊是用于獲取所發(fā)送文件的類型。使用mime來獲取文件類型來設(shè)置HTTP頭的Content-Type。而 socket.io 則是這個聊天室的主角了,這是一個支持事實通訊而設(shè)計的輕量的雙向通信協(xié)議。

  • 在當(dāng)前文件夾chatroom下新建app.js文件作為整個程序的入口文件,首先引入http,fs,path和mime包。添加如下代碼:

var http = require('http');
var fs = require('fs');
var path = require('path');
var mime = require('mime');
var socketio = require('socket.io');
  • 添加訪問文件不存在時,返回404頁面,在app.js中添加如下代碼:

function send404 (res) {
    res.writeHead(404, {'ContentType': 'text/plain'});
    res.write('you are in a black hole');
    res.end();
}
  • writeHead()第一個參數(shù)代表HTTP響應(yīng)碼,404是指沒有發(fā)現(xiàn)文件。ContentType代表返回文件類型。

  • 添加提供文件服務(wù),用于給客戶端返回相應(yīng)文件。在app.js中添加如下代碼:

function sendFile (res, filePath, fileContent) {
    res.writeHead({
        200,
        'ContentType': mime.lookup(path.basename(filePath))
    });
    res.end(fileContents);
}

200代表返回成功。

  • 提供靜態(tài)文件服務(wù)。在app.js中添加如下代碼:

var cache = {};
function serveStaticFile (res, cache, absPath) {
    if(cache[absPath]) { //檢測是否文件已經(jīng)存在于內(nèi)存,如果存在直接返回。
        sendFile(res, absPath, cache[absPath]);
    } else {
        fs.exists(absPath, function(exists){ //檢測absPath路徑下有沒有此文件
            if(exists) {
                fs.readFile(absPath, function(err, data){
                    if(err) {
                        send404(res);
                    } else {
                        cache[absPath] = data; //存進(jìn)內(nèi)存
                        sendFile(res, absPath, data);
                    }
                });
            } else {
                send404(res);
            }
        });
    }
}
  • 使用http模塊,新建服務(wù)器并設(shè)置路由。在app.js中添加如下代碼:

var server = http.createClient(function(req, res) {
    var filePath = false;
    if(req.url == '/') {
        filePath = 'public/index.html';
    } else {
        filePath = 'public/' + req.url;
    }
    var absPath = './' + filePath;
    serveStaticFile(res, cache, absPath);
});
server.listen(3000, function(req, res) {
    console.log('server started at port 3000');
});

敲完代碼,大功告成!接下來再chatroom中新建文件夾public保存靜態(tài)文件,建立一個主頁index,內(nèi)容隨便填寫。在命令行中輸入node app,在瀏覽器中打開localhost:3000看看效果吧~

Release Notes

Popular Entries