前端自动化由来已久,最近为了编写自己的自动化工具,本人开始详细学习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. fail2ban 防止ssh暴力破解

    1.环境 CentOS 7 2.在线安装 yum install -y epel-release yum install -y fail2ban fail2ban 结构 /etc/fail2ban   ...

  2. RESTFUL风格 put 报错 HTTP Status 405 - JSPs only permit GET POST or HEAD

    出现下图这种情况时是controller所return的jsp视图找不到, 所以提示请求只允许GET.POST.HEAD. 解决方案 1.若返回视图,把表单中name为_method的input值改为 ...

  3. input输入框限制输入正整数、小数、字母、文字

    有的时候需要限制input的输入格式: 例如,输入大于0的正整数 <input onkeyup="if(this.value.length==1){this.value=this.va ...

  4. JS常见操作,日期操作,字符串操作,表单验证等

    复制代码 //第一篇博文,希望大家多多支持 /***** BasePage.js 公共的 脚本文件 部分方法需引用jquery库 *****/ //#region 日期操作 //字符串转化为时间. f ...

  5. 20162320刘先润第三周Bag类测试

    前言 以下内容是本周Bag代码的课后作业,要求是完成伪代码.产品代码和测试代码,为了书写方便我将伪代码以注释的形式写在了产品代码的后面 测试步骤 1.首先对Bag类引用BagInterface的代码进 ...

  6. Archlinux安装和使用技巧

    一 准备工作 1  文件下载及启动盘制作 文件可以在https://mirrors.ustc.edu.cn/,这是个中科大的镜像网,选择如下: 下载完成后,就是制作一个启动盘,我使用的是Linux下强 ...

  7. 201621123031 《Java程序设计》第3周学习总结

    Week03-面向对象入门 1. 本周学习总结 初学面向对象,会学习到很多碎片化的概念与知识.尝试学会使用思维导图将这些碎片化的概念.知识点组织起来.请使用工具画出本周学习到的知识点及知识点之间的联系 ...

  8. EasyUI中Tabs添加远程数据的方法。

    tabs加载远程数据: $(function () { $("#btnquery").click(function () { if (!$("#tcontent" ...

  9. lua保存table到文件并从文件解析成table

    require("json") result = { ["ip"]="192.168.0.177", ["date"]= ...

  10. python小练习之三---购物车程序

    购物车购物的例子 严格来讲,这个例子相对大一些 功能也稍完备一些,具有用户登录,商品上架,用户购物,放入购物车,展示每个用户的购物车里的商品的数量,用户账户余额,支持用户账户充值等 下面展示的代码有些 ...