这是我第一次使用Node.js来编程,而且是构建一个一个静态文件资源访问的Http server。
我个人从事java相关的开发差不多有10年了吧,一直都是在构建后端的服务、应用。对于前端一直没有过多的接触。对于servlet、jsp等技术也仅限于工作的需要(包含struct等mvc框架)。
最近工作中,参与负责了公司产品Object-Centric理念的开发模式构建。利用Business model对象拉通前后端的开发体验,通过Business Model 对象组织所有和该业务模型对象关联的资源:实体模型、试图模型、服务(rest)、业务校验、数据转换处理、页面等。
目前由于参与到前端页面相关技术的构建和研究,突然对这方面的技术产生了浓厚的兴趣。对Node.js、AngularJS、TypeScript都有兴趣深入的学习和使用。后面打算再把mangodb纳入到学习计划中,这样就把MEAN技术拉通了:)。
下面就是我基于Node.js实现的一个简单的静态页面文件的http server,总体体验来说,在编码的高效性、灵活性等体验,对比java实现会好很多。但是在类型的识别、编译错误的识别、类型的提示上没有强语言类型的java来的好。
首先来看一下整个工程的目录结构:
目录说明:
HTTP_SERVER:整个工程的根目录;
app:静态文件存放的目录,对于我来说就是我“未来”期望一个web工程的根目录,对应于java构建web应用,就是web-app了。
css:用来存放样式定义文件
文件说明:
server.js:提供静态http服务的主程序。
mine.js:键值对的配置文件,定义了对不同的文件类型的处理定义。
index.html:web app中的首页,静态的html的文件。
indx.css:index.html首页引用的层叠样式表的定义文件。
首先来看一下server.js的实现:
var http = require('http'); var url = require('url'); var fs = require('fs'); // 自己定义的类型定义文件 var mine = require('./mine').types; var path = require('path'); var port = '3000'; var hostname = '127.0.0.1'; var server = http.createServer((req, res) => { var pathName = url.parse(req.url).pathname; // url.parse会将一个请求的路径解析为格式化的输出 /* { protocol : 'http' , auth : null , host : 'example.com:8080' , port : '8080' , hostname : 'example.com' , hash : null , search : '?a=index&t=article&m=default', query : 'a=index&t=article&m=default', pathname : '/one', path : '/one?a=index&t=article&m=default', href : 'http://example.com:8080/one?a=index&t=article&m=default' } */ var realPath = path.join("app", pathName); console.log(realPath); var ext = path.extname(realPath); ext = ext ? ext.slice(1) : 'unknow'; // ext = ext ? ext.split('.')[1] : 'unknown'; fs.stat(realPath, (err, stats) => { if (err) { console.log(err); 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", (err, data) => { if (err) { res.writeHead(500, { 'Content-Type': 'text/plain' }); res.end(err); } else { console.log(data); var contentType = mine[ext] || "text/plain"; res.writeHead(200, { 'Content-Type': contentType }); res.write(data, "binary"); res.end(); } }) console.log(stats); } }); }); server.listen(port, hostname, () => { console.log(`Server running at http://${hostname}:${port}`); })
相关推荐
《Node.js 实战(双色)》通过8 个实例讲解了Node.js 在实战开发中的应用,涉及Node.js 常用框架、非关系型数据库、关系型数据库、运维命令和网络安全等内容。章节按照从简单到复杂的难度排序,每一章都通过一个有趣...
微信小程序云开发(SpringBoot+node.js项目实战)
HTTP简单服务的搭建、Node.js静态资源管理、文件处理、Cookie和Session实践、Crypto模块加密、Node.js与Nginx配合;UDP服务器的搭建、Node.js与PHP之间合作;Node.js的实现机制、Node.js的原生扩展与应用;Node.js的...
通过一个去中心化电商DApp的完整开发过程,引导学习者在实战中深入理解并掌握如何基于以太坊开发去中心化应用。课程涵盖以太坊、IPFS、MongDB、Express等诸多技术点,采用敏捷开发思路,内容深入浅出,是不可多得的...
6.3 Node.js应用部署 138 6.3.1 日志功能 138 6.3.2 使用cluster模块 140 6.3.3 启动脚本 142 6.3.4 共享80端口 143 6.4 Node.js不是银弹 144 6.5 参考资料 146 附录A JavaScript的高级特性 147 ...
node.js搭建服务器,静态文件可访问
现代outbound MTA 跨平台的服务器应用程序,基于Node.js和LevelDB构建
Node.js Javascript脚本文件03-Node.js Javascript数组用法04-Node.js Javascript函数用法05-Node.js Javascript对象用法6-Node.js第一个程序07-Node.js创建一个WebSite静态网站08-构造一个...
运行于浏览器的Javascript,浏览器就是Javascript代码的解析器,而Node.js则是服务器端JS的代码解析器,存于服务器端的JS代码由Node.js来解析和应用。 JS解析器只是JS代码运行的一种环境,浏览器是JS运行的一种...
Node.js硬实战 115个核心技巧.pdf Node.js硬实战 115个核心技巧 难得的node.js资料,你值得拥有。
Node.js是一个JavaScript服务器,支持可伸缩的高性能Web应用。借助异步I/O,这个服务器可以同时做很多事情,能满足聊天、游戏和实时统计等应用的需求。并且既然是JavaScript,那你就可以全栈使用一种语言。 本书向...
Node.js是一个JavaScript服务器,支持可伸缩的高性能Web应用。借助异步I/O,这个服务器可以同时做很多事情,能满足聊天、游戏和实时统计等应用的需求。并且既然是JavaScript,那你就可以全栈使用一种语言。, 本书向...
一种高效稳定、简洁易用的Android Hook框架,实际项目验证,拥有远超其他同类框架的优异稳定性
唯快不破——高效定位线上Node.js应用内存泄漏.pdf
使用node搭建静态资源服务器
第7章 Node.js中的文件操作.ppt 第8章 认识express模块.ppt 第9章 MySQL数据库.ppt 第10章 Express框架.ppt 第11章 socket.io 模块.ppt 第12章 MongoDb数据库.ppt 第13章 综合项目——全栈开发博客网.ppt 第14章 ...
node.js了解(csdn)————程序
我们将用区块链、星际文件系统(IPFS)、Node.js和MongoDB来构建电商平台类似淘宝的在线电商应用,卖家可以自由地出售商品,买家可以自由地购物: 去中心化: 和淘宝或eBay不同,我们把所有的商业逻辑和核心数据都...
Node.js是一个基于V8引擎的开源、跨平台的JavaScript运行环境,用于执行JavaScript代码。它允许开发者使用JavaScript编写服务器端应用程序,使得前后端语言统一,提高开发效率。Node.js提供了一个非阻塞I/O模型,使...