作为一个从业三年左右的,并且从事过半年左右PHP开发工作的前端,对于后台,尤其是对以js语言进行开发的nodejs,那是比较有兴趣的,虽然本身并没有接触过相关的工作,只是自己私下做的一下小实验,但是还是记录一下方便以后复习!

今天主要记录一下,很久以前用nodejs制作一个简单的服务监听程序的一些过程!

大家都知道,通过nodejs可以对前台请求进行监听,这里就放一个官网的hello world例子吧:

var http = require('http');

http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n');
}).listen(1337, '127.0.0.1'); console.log('Server running at http://127.0.0.1:1337/');

以上代码相信了解过node的童鞋应该都会比较熟悉!

那么node既然可以监听请求,那么是不是就可以根据前台的不同请求返回不同的文件或内容?这不就是一个简单的服务器了么!抱着这样的想法,简单实验了一下,我们都知道,服务器可以根据请求的文件不同,会使用相应mine类型的!比如../index.css使用的mine类型就是text/css!那么,我们是不是应该有个常用mine类型的一个简单配置?这里,做了个简单的mine配置文件mine.js,用json来存放一下常用的格式:

exports.types = {
"css": "text/css",
"gif": "image/gif",
"html": "text/html",
"ico": "image/x-icon",
"jpeg": "image/jpeg",
"jpg": "image/jpeg",
"js": "text/javascript",
"json": "application/json",
"pdf": "application/pdf",
"png": "image/png",
"svg": "image/svg+xml",
"swf": "application/x-shockwave-flash",
"tiff": "image/tiff",
"txt": "text/plain",
"wav": "audio/x-wav",
"wma": "audio/x-ms-wma",
"wmv": "video/x-ms-wmv",
"xml": "text/xml"
};

当然,除了这些以外还有很多其他格式,这里就不一一举例了!

好了,有了mine格式对应的文件配置文件,接下来就简单了,首先得根据官网例子搭建一个监听程序,然后在监听程序中添加一下简单的www.baidu.com/这个样的链接默认打开文件的处理,以及相对链接的补全等!当然还得做一下简单的错误处理,如404,500等!具体看代码:

/*
*搭建http服务器,监听http请求
*/
var http = require("http"),
fs = require('fs'),
path = require('path'),
mine = require('./mine').types;
url = require('url');
//定义简单的工具
//获取当前时间
var date = function(ms) {
var date = ms ? new Date(ms) : new Date(),
mon = date.getMonth() >= 10 + 1 ? '-' : '-0',
d = date.getDate() >= 10 ? '-' : '-0',
hour = date.getHours() >= 10 ? ' ' : ' 0',
min = date.getMinutes() >= 10 ? ':' : ':0',
sec = date.getSeconds() >= 10 ? ':' : ':0';
return date.getFullYear() + mon + (date.getMonth() + 1) + d + date.getDate() + hour + date.getHours() + min + date.getMinutes() + sec + date.getSeconds();
},
//定义输出log日志方法,带上时间,方便调试
DebugLog = function(mes) {
var now = date();
console.log(now + " " + mes);
};
//服务监听
exports.server = function() {
http.createServer(function(req, res) {
var pathname = url.parse(req.url).pathname,//获取url中的文件名
pathname = (pathname !== "/" && pathname) ? pathname : "/index.html";//处理链接以'/'结尾的情况
var realPath = path.join("../", path.normalize(pathname.replace(/\.\./g, ""))),//将链接转换成物理路径
ext = path.extname(realPath);
ext = ext ? ext.slice(1) : 'unknown';//获取文件扩展名
//查找文件
fs.exists(realPath, function (exists) {
if (!exists) {//处理404
res.writeHead(404, {
'Content-Type': 'text/plain'
}); res.write("This request URL " + pathname + " was not found on this server.");
res.end();
} else {//读取文件
fs.readFile(realPath, "binary", function (err, file) {
if (err) {//程序出错报500错误
res.writeHead(500, {
'Content-Type': 'text/plain'
});
res.end(err);
} else {//正常返回文件
var contentType = mine[ext] || "text/plain";//根据mine.js中的配置设置对应的contentType
res.writeHead(200, {
'Content-Type': contentType
});
res.write(file, "binary");
res.end();
}
});
}
});
}).listen(8888, 'localhost');
tool.DebugLog("http服务启动,开始监听127.0.0.1:8888的http请求!");
}

ok,代码到这里基本就结束了,当然这只是最简单的功能,大家可以自己去丰富!本文就到这里吧,欢迎大家交流讨论!

用nodejs搭建一个简单的服务监听程序的更多相关文章

  1. 用nodejs搭建一个简单的服务器

    使用nodejs搭建一个简单的服务器 nodejs优点:性能高(读写文件) 数据操作能力强 官网:www.nodejs.org 验证是否安装成功:cmd命令行中输入node -v 如果显示版本号表示安 ...

  2. 利用 nodeJS 搭建一个简单的Web服务器(转)

    下面的代码演示如何利用 nodeJS 搭建一个简单的Web服务器: 1. 文件 WebServer.js: //-------------------------------------------- ...

  3. 使用 SpringBoot+Dubbo 搭建一个简单分布式服务

    实战之前,先来看几个重要的概念 开始实战之前,我们先来简单的了解一下这样几个概念:Dubbo.RPC.分布式.由于本文的目的是带大家使用SpringBoot+Dubbo 搭建一个简单的分布式服务,所以 ...

  4. nodeJS搭建一个简单的(代理)web服务器

    前端获取数据时经常遇见跨域问题,以前一直用nginx做反向代理.最近在用vuejs,发现webpack-dev-server的代理简单好用.于是仿照写了一个简单的web服务器,用于非webpack的项 ...

  5. 超详细,新手都能看懂 !使用SpringBoot+Dubbo 搭建一个简单的分布式服务

    来自:JavaGuide Github 地址:https://github.com/Snailclimb/springboot-integration-examples 目录: 使用 SpringBo ...

  6. Prism for WPF 搭建一个简单的模块化开发框架(四)异步调用WCF服务、WCF消息头添加安全验证Token

    原文:Prism for WPF 搭建一个简单的模块化开发框架(四)异步调用WCF服务.WCF消息头添加安全验证Token 为什么选择wcf?   因为好像wcf和wpf就是哥俩,,, 为什么选择异步 ...

  7. 【从零开始】用node搭建一个jsonp&json服务

    目录: 一.介绍 二.node安装 三.webstorm配置node环境 四.代码介绍 五.如何使用 六.自定义域名 七.其他 一.介绍 1.背景     日常工作中,跟后端商定好接口格式后:通常采用 ...

  8. 【netty】(2)---搭建一个简单服务器

    netty(2)---搭建一个简单服务器 说明:本篇博客是基于学习慕课网有关视频教学.效果:当用户访问:localhost:8088 后 服务器返回 "hello netty"; ...

  9. Golang学习-第二篇 搭建一个简单的Go Web服务器

    序言 由于本人一直从事Web服务器端的程序开发,所以在学习Golang也想从Web这里开始学起,如果对Golang还不太清楚怎么搭建环境的朋友们可以参考我的上一篇文章 Golang的简单介绍及Wind ...

随机推荐

  1. 转: chrome64打开弹出窗flash的办法

    https://jingyan.baidu.com/article/380abd0a38f0411d90192c2e.html

  2. NatApp开启HTTPS访问方式

    一.首先需要到付费隧道中选择免费开启https 二.其次需要重新启动natapp服务,如下图出现两个隧道说明OK

  3. SpringBootWEB项目和非Web项目的全局异常捕获

    一.简介 SpringBoot的WEB异常捕获,如果是WEB项目的话,可以直接处理Controller中的异常.如果不是WEB项目的话,就需要使用AspectJ来做切面. 二.WEB项目 packag ...

  4. Spring中通过Annotation来实现AOP

    一.Spring配置文件 <!--通过@AspectJ注解的形式来使用Spring AOP,强制使用CGLIB代理--> <aop:aspectj-autoproxy proxy-t ...

  5. 阿里云centos安装docker-engine实践

    近日在阿里云ECS服务器(centos系统)中安装docker,参考官方指南 https://docs.docker.com/engine/installation/linux/centos/  大概 ...

  6. mvc4 强大的导出和不需要上传文件的批量导入EXCEL--SNF快速开发平台3.1

    数据的导入导出,在很多系统里面都比较常见,这个导入导出的操作,在Winform里面比较容易实现,但在Web上我们应该如何实现呢?本文主要介绍利用MVC4+EasyUI的特点,并结合文件上传控件,实现文 ...

  7. blinn-phong高光反向穿透问题

    blinn-phong高光: H=normalize(V+L);
 specular=pow(saturate(dot(N,H)),shiness); 会遇到如下问题: 图中光源在surface背面, ...

  8. struts2:表单标签

    目录 表单标签1. form标签2. submit标签3. checkbox标签4. checkboxlist标签5. combobox标签6. doubleselect标签7. head标签8. f ...

  9. VSCode配置TypeScript

    网上教程一堆,记录下我认为的关键点: 1.创建tsconfig.json,使用命令行在项目文件夹下输入“tsc --init”即可: 2.创建tasks.json,在VSCode中,使用ctrl+sh ...

  10. php5.6-lumen与php5.6-phalcon性能对比

    场景一: 两个框架简单输出helloworld phalcon:{QPS:7349,平均响应时间:124.11ms},lumen{QPS:1327,平均响应时间:721.54ms} QPS: phal ...