博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
我的第一个Node web程序
阅读量:6619 次
发布时间:2019-06-25

本文共 4234 字,大约阅读时间需要 14 分钟。

NodeJS的流行也带来了开发由前端转到全栈,前端不再局限于页面如何展现,用户如何操作,也设计到整个应用的架构以及业务流程。

本篇来简单的通过实例,讲述node中web开发的模式。

参考来自《Node web开发》一书。

关于node

  node是基于事件的异步驱动系统,通过可扩展的方式创建网络服务器。

  例如,创建一个网络服务器:

var http_port = 8124;var http = require('http');var server = http.createServer(function (req,res){    ....自己的代码});server.listen(http_port);

  这样就可以创建一个简单的服务器。

关于npm

  npm是node的包管理工具,node里面有很多的模块,可以通过require('模块名字')的方式加载到项目中。

  常用的命令:

npm init 创建项目的package.json文件,配置其信息以及依赖项npm install 通过package.json的声明,安装需要的包npm install xxxx 安装xxxx包npm install xxxx --save-dev 以开发模式安装xxxx包,当用于生产环境时,不会下载开发模式的xxxx

关于项目布局

  在node中,很注重模块化,按照commonjs的思想,尽量把功能分散到模块中进行重用。

  但是也有点弊端,会出现很多松散的文件,不易于管理。

  通常node中都会把第三方的模块包,放在node_modules文件夹中,node也会在require()的时候,自动向上搜索该文件家,引用其js。

  node_modules中的js文件,大多是一些加载自动执行的文件,或者对外暴露出一定的接口,比如:

(function(a,b){}(this,function(){//.....}));

  或者

var xxx = require('xxx');exports.funca = function(){//.......xxx}exports.funcb = function(){//.....xxx}

关于代码

  本篇的项目做了一个小网站,通过模块化开发,项目组织如下:

app:|——app-node.js 定义web服务器|——home-node.js 定义home主页模块|——htutil.js 定义工具模块,用于定义导航,以及网页模板替换方法,和获取http信息|——mult-node.js 通过get方法获取参数信息,并执行加法|——package.json 定义网站项目信息

  app-node.js代码:

var http_port = 8124;var http = require('http');var htutil = require('./htutil');var server = http.createServer(function (req,res){    console.log("in server!");    htutil.loadParams(req,res,undefined);    if(req.requrl.pathname === '/'){        require('./home-node').get(req,res);    }else if(req.requrl.pathname === '/square'){        require('./square-node').get(req,res);    }else if(req.requrl.pathname === '/factorial'){        require('./factorial-node').get(req,res);    }else if(req.requrl.pathname === '/fibonacci'){        require('./fibonacci-node').get(req,res);    }else if(req.requrl.pathname === '/mult'){        require('./mult-node').get(req,res);    }else{        res.writeHead(404,{'Content-Type':'text/plain'});        res.end("bad url"+req.url);    }});server.listen(http_port);console.log('listening to http://localhost:8124');

  home-node.js

var htutil = require('./htutil');exports.get = function(req,res){    res.writeHead(200,{        'Content-Type':'text/html'    });    res.end(htutil.page("Math Wizard",        htutil.navbar(),        "

Math Wizard

" ));}

  mult-node.js

var htutil = require("./htutil");exports.get = function(req,res){    res.writeHead(200,{        'Content-Type':'text/html'    });    var result = req.a * req.b;    res.end(        htutil.page("Multiplication",htutil.navbar(),[                (!isNaN(req.a) && !isNaN(req.b)                    ?(                        "

{a}*{b}={result}

" .replace("{a}",req.a) .replace("{b}",req.b) .replace("{result}",req.a*req.b) ) :""), "

Enter numbers to multiply

", "
", "A:
", "B:
", "
" ].join('\n')) );}

  htutil.js

var url = require('url');//get url params a & bexports.loadParams = function(req,res,next){    req.requrl = url.parse(req.url,true);    req.a = (req.requrl.query.a && !isNaN(req.requrl.query.a))        ?new Number(req.requrl.query.a)        :NaN;    req.b = (req.requrl.query.b && !isNaN(req.requrl.query.b))        ?new Number(req.requrl.query.b)        :NaN;    if(next) next();}// exports.navbar = function(){    return ["
" ].join('\n');}//exports.page = function(title,navbar,content){ return ["{title}", "{navbar}{content}", "" ].join('\n') .replace("{title}",title,"g") .replace("{navbar}",navbar,"g") .replace("{content}",content,"g");}

  package.js

{  "name": "chap04",  "version": "1.0.0",  "description": "",  "main": "app-node.js",  "scripts": {    "test": "echo \"Error: no test specified\" && exit 1"  },  "author": "",  "license": "ISC"}

  执行命令行:

node app-node.js

  访问http://localhost:8124,就可以访问到网址:

本文转自博客园xingoo的博客,原文链接:,如需转载请自行联系原博主。
你可能感兴趣的文章
Post请求
查看>>
labview 中activex的初步使用方法
查看>>
Jquery 操作Html 控件 CheckBox、Radio、Select 控件
查看>>
JSP与JavaBeans
查看>>
解决Android中TextView首行缩进的问题
查看>>
oracle 查询哪些表分区
查看>>
SQL Server 2012:SQL Server体系结构——一个查询的生命周期(第1部分)
查看>>
Ubuntu启动sshd服务
查看>>
Java排序算法(三):直接插入排序
查看>>
推断图片格式
查看>>
Python 列表 min() 方法
查看>>
C语言中 Float 数据结构的存储计算
查看>>
HSF源码阅读
查看>>
1.Flask URL和视图
查看>>
【死磕jeesite源码】Jeesite配置定时任务
查看>>
MFC更换窗口图标
查看>>
[三]JavaIO之IO体系类整体设计思路 流的概念以及四大基础分类
查看>>
Java 读取某个目录下所有文件、文件夹
查看>>
朱晔和你聊Spring系列S1E2:SpringBoot并不神秘
查看>>
2013年度第一期测试沙龙 PPT下载
查看>>