前端自动化由来已久,最近为了编写自己的自动化工具,本人开始详细学习node,为了检验学习成果,决定编写一个类似于webqq的聊天系统。以下是该系统具有的模块。

  • 登录模块(自动登录)
  • 聊天模块(私聊,群聊)
  • 统计模块(一段时间内活跃的程度)
  • 地理模块(查找附近)

本文主要讲述如何用node.js编写静态资源服务器。

前期准备

既然要用node.js编写,首先是下载、安装最新版的node。

启动服务

nodejs 启动一个服务器的方法很简单,就是调用node的原生模块(http),调用其createServer方法即可。

const http = require('http');
const Until = require('./app/core/router'); global.BASE_DIR = __dirname;
global.VIEW = global.BASE_DIR + '/view/'; http.createServer((req, res) => { // 第一个参数为请求第二个参数为回应
"use strict";
Until.init(req.url, req).then(reslove => {
if (!reslove) {
return
}
res.writeHead(200, {'Content-Type': reslove.type +'; charset=utf-8'}); // charset=utf-8 指定编码方式
res.end(reslove.response)
})
}).listen(3000) 端口号

路由

当启动服务之后,我们就要开始编写整个系统的路由,系统的所有请求其实分为三类:一是请求前端页面,二是请求静态资源,三是请求数据。我们需要有一些标记来辨识请求以便合理处理。

    getRes(url) {
"use strict";
url = url.toString();
if (url.includes('.html') || (!url.includes('.') && !url.includes('/api/'))) { // 页面
return this.renderHtml();
} else if (url.includes('/api/')) { // api
return this.renderApi();
} else if (url.includes('.')){
return this.renderRrsource(); // 静态资源
}
},

下面以登录页面为例来说明请求及响应过程。我们假定'/login'为登录页面的链接,当服务器收到请求时,需要做两件事情,一是查找登录的页面,二是将页面返回给前台。

    // 检测文件是否存在 存在则返回文件
renderFile (filename, num){
"use strict";
let path_arr = [global.VIEW + filename + '.jade', global.BASE_DIR + filename]
return new Promise((reslove, reject) => {
let path = path_arr[num], type;
fs.access(path, (err) => { // 检测文件是否存在
if (err) {
reject(err);
} else {
if (num == 0) { // 返回页面
reslove({type: 'text/html', response: jade.renderFile(path)})
} else { // 返回静态资源
fs.readFile(path, (err, data)=> {
if (err) {
reject(err)
} else {
if (path.includes('.css')) {
type = 'text/css'
} else if (path.includes('.js')) {
type = 'application/x-javascript'
}
reslove({type: type, response: data})
}
})
} }
})
})
},

上面是请求资源和文件的逻辑,接口类似。完成效果:

原生nodejs在线聊天系统的更多相关文章

  1. NodeJS在线聊天室(NodeJS & SocketIO & Express & EJS & MongoDB & Gulp)

    项目背景 这个项目主要是为了玩玩NodeJS,项目的方向大概是做出类似QQ的在线聊天系统.想要在线体验可以点击在线演示. 项目使用PM2进行部署和管理,功能在不断的迭代开发中.如果你觉得这个项目比较有 ...

  2. 原生nodejs 学习笔记1

    网上许多nodejs教程或书藉都是教你调用第三方模块来编写nodejs应用的,虽然这是非常便捷的,但是封装太厚,你基本一点东西还是没有学到.人家的模块,人家想怎么改就行,可以下一版本就改了接口,你的应 ...

  3. 七天学会NodeJS (原生NodeJS 学习资料 来自淘宝技术团队)

    NodeJS基础 什么是NodeJS JS是脚本语言,脚本语言都需要一个解析器才能运行.对于写在HTML页面里的JS,浏览器充当了解析器的角色.而对于需要独立运行的JS,NodeJS就是一个解析器. ...

  4. nodejs实战:使用原生nodeJs模块实现静态文件及REST请求解析及响应(基于nodejs6.2.0版本,不使用express等webMVC框架 )

    一.准备工作 1.安装nodejs 首先你需要安装nodeJs 那么nodejs官网:http://nodejs.cn/,下载相应版本,一步一步安装. 二.使用nodejs开发服务器后台应用 1.创建 ...

  5. 原生NodeJs制作一个简易聊天室

    准备工作 安装NodeJs环境 安装编译器Sublime 如果网速不理想,可以百度一下如何加快npm的速度~ 使用node搭建一个简单的网站后台 做完准备工作之后,新建文件夹chatroom,在cha ...

  6. 原生nodejs 学习笔记2

    本章节学习流, 流的一个好处在于减少各种异步IO的回调地狱.IO操作遍及我们各种操作,比如数据库读写,文件读写, 文件转换压缩--别的不说,比如第一节,我们要将一个HTML文件返回浏览器,就涉及IO操 ...

  7. websocket 加layim实现在线聊天系统

    实现流程: 1.浏览器连接服务器时保存所有用户id以及对应的唯一session(session用户用户消息推送). 1.1:判断登录用户是否有离线消息(个人消息以及群消息),有则将离线消息进行推送给登 ...

  8. Linux网络编程(多人在线聊天系统)

    一.首先是服务器的建立 首先是一个信号终止程序,发信号ctrl+c终止程序,而是是初始化网络通信. 创建一个描述符负责绑定服务器和监听服务器接收客户端的消息. socket()->sockadd ...

  9. web在线聊天系统。非ajax轮询

    利用php的死循环和刷新缓冲区实现.   浏览器发送请求到PHP获取消息页面. php接收到来之浏览器请求后. 循环获取数据库里面的消息.   当存在消息的时候.PHP告诉浏览器.我有消息给你.你接受 ...

随机推荐

  1. 如何测试一个WEB的输入框?

    WEB输入框是B/S架构系统中页面使用非常频繁的控件,比如我们登录一个网站,输入 用户名和密码的控件都是输入框,比如使用百度搜索,在输入搜索内容的控件也是输入框,比如网购一个物品,我们需要输入购买的数 ...

  2. iOS 消息发送与转发详解

    Objective-C 是一门动态语言,它将很多静态语言在编译和链接时期做的事情,放到了运行时来处理.之所以能具备这种特性,离不开 Runtime 这个库.Runtime 很好的解决了如何在运行时期找 ...

  3. css中的背景色渐变以及背景图的定位

    单纯的背景色渐变: background: -webkit-gradient(linear, 0 0, 0 100%, color-stop(0, #fff), color-stop(1, #ddd) ...

  4. unittest自动化使用HTMLTestRunner的中文编码问题

    1.使用unittest自动化测试框架,使用HTMLTestRunner生成测试报告,中文乱码问题! 如图 2.解决方法: 第一步:先在自己的测试脚本中添加 import sys reload(sys ...

  5. fcode-页面九宫格自动锁屏jquery插件

    fcode.js 自动锁屏插件 fcode.js是什么? fcode.js是一款web页面九宫格自动锁屏js插件,依赖于jquery, 会在设置的范围里,判断用户有无操作,然后执行锁屏的功能. 就一个 ...

  6. Beta Scrum Day 6

    听说

  7. 每日冲刺报告——Day3(Java-Team)

    第三天报告(11.4  周六) 团队:Java-Team 成员: 章辉宇(284) 吴政楠(286) 陈阳(PM:288) 韩华颂(142) 胡志权(143) github地址:https://git ...

  8. Beta冲刺计划---Day0

    Beta阶段报告---Day0 1.需要改进完善的功能   我们上一阶段开发由于开发时间匆忙,对于爬虫耗时的优化没有考虑.优化的空间我在Alpha阶段的总结报告里说过,具体看下图.   这张图显示出爱 ...

  9. swift 编写欢迎界面-- ios开发

    转载自:http://blog.csdn.net/u014455765/article/details/49622947 现在很多iOS开发人员都从oc转向Swift, swift 也必将成为ios开 ...

  10. 【iOS】字号问题

    一,ps和pt转换 px:相对长度单位.像素(Pixel).(PS字体) pt:绝对长度单位.点(Point).(iOS字体) 公式如下: pt=(px/96)*72. 二,字体间转换 1in = 2 ...