Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >我的第一个Node web程序

我的第一个Node web程序

作者头像
用户1154259
发布于 2018-01-17 08:53:40
发布于 2018-01-17 08:53:40
8840
举报

NodeJS的流行也带来了开发由前端转到全栈,前端不再局限于页面如何展现,用户如何操作,也设计到整个应用的架构以及业务流程。 本篇来简单的通过实例,讲述node中web开发的模式。 参考来自《Node web开发》一书。

关于node

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

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

代码语言:javascript
AI代码解释
复制
var http_port = 8124;
var http = require('http');

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

server.listen(http_port);

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

关于npm

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

  常用的命令:

代码语言:javascript
AI代码解释
复制
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文件,大多是一些加载自动执行的文件,或者对外暴露出一定的接口,比如:

代码语言:javascript
AI代码解释
复制
(function(a,b){}(
this,
function(){
//.....
}));

  或者

代码语言:javascript
AI代码解释
复制
var xxx = require('xxx');

exports.funca = function(){
//.......xxx
}

exports.funcb = function(){
//.....xxx
}

关于代码

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

代码语言:javascript
AI代码解释
复制
app:

|——app-node.js 定义web服务器

|——home-node.js 定义home主页模块

|——htutil.js 定义工具模块,用于定义导航,以及网页模板替换方法,和获取http信息

|——mult-node.js 通过get方法获取参数信息,并执行加法

|——package.json 定义网站项目信息

  app-node.js代码:

代码语言:javascript
AI代码解释
复制
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

代码语言:javascript
AI代码解释
复制
var htutil = require('./htutil');
exports.get = function(req,res){
    res.writeHead(200,{
        'Content-Type':'text/html'
    });
    res.end(htutil.page("Math Wizard",
        htutil.navbar(),
        "<p>Math Wizard</p>"
        ));
}

  mult-node.js

代码语言:javascript
AI代码解释
复制
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)
                    ?(
                        "<p class='result'>{a}*{b}={result}</p>"
                        .replace("{a}",req.a)
                        .replace("{b}",req.b)
                        .replace("{result}",req.a*req.b)
                    )
                    :""),
                "<p>Enter numbers to multiply</p>",
                "<form name='mult' action='/mult' method='get'>",
                "A:<input type='text' name='a' /><br/>",
                "B:<input type='text' name='b' /><br/>",
                "<input type='submit' value='Submit' /></form>"
            ].join('\n'))
        );
}

  htutil.js

代码语言:javascript
AI代码解释
复制
var url = require('url');
//get url params a & b
exports.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 ["<div class='navbar'>",
            "<p><a href='/'>home</a></p>",
            "<p><a href='/mult'>Multiplication</a></p>",
            "<p><a href='/square'>Square's</a></p>",
            "<p><a href='/factorial'>factorial's</a></p>",
            "<p><a href='/fibonacci'>Fibonacci's</a></p>",
            "</div>"
        ].join('\n');
}
//
exports.page = function(title,navbar,content){
    return ["<html><head><title>{title}</title></head><body>",
            "<td>{navbar}</td><td>{content}</td>",
            "</tr></table></body></html>"
        ].join('\n')
        .replace("{title}",title,"g")
        .replace("{navbar}",navbar,"g")
        .replace("{content}",content,"g");
}

  package.js

代码语言:javascript
AI代码解释
复制
{
  "name": "chap04",
  "version": "1.0.0",
  "description": "",
  "main": "app-node.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}

  执行命令行:

代码语言:javascript
AI代码解释
复制
node app-node.js

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015-07-26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
利用 nodeJS 搭建一个简单的Web服务器
在服务器根目录下打开 cmd 并运行 node WebServer 命令,然后在浏览器中输入 http://localhost:8124/ 即可查看。
黄啊码
2020/05/29
2.8K0
如何用Node去写一个Web应用框架
IMWeb前端团队
2017/12/29
8380
node.js实现的Long Polling例子
前台页面使用jquery的jsonp来进行轮询。后端node.js监听的端口是8124
meteoric
2018/11/16
1.8K0
node之新版url模块
爱学习的前端歌谣
2023/11/27
2550
node之新版url模块
Node.js基础教程
Node.js 的推出,不仅从工程化的角度自动化掉更多琐碎费时的工作,更打破了前端后端的语言边界,让 JavaScript 流畅的运行在服务器端,本系列课程旨在引导前端开发工程师,以及 Node.js 初学者走进这个活泼而有富有生命力的新世界。
达达前端
2022/04/29
6720
Node.js基础教程
Node.js组成及Events模块
Node.js本身提供许多模块,每个模块实现一种功能,如文件操作模块fs,构建HTTP服务的http模块等,每个模块都是一个javascript文件,可以自己编写模块。
conanma
2022/01/05
1K0
node之url模块
爱学习的前端歌谣
2023/11/24
2630
node之url模块
使用noode.js创建一个服务器
打开gitbash,切换到js文件当前的文件夹,然后输入node index.js(index.js是我的js文件名,反正你们取什么名就输入啥名)
bamboo
2019/01/29
1.8K0
使用noode.js创建一个服务器
node之http模块之爬虫和event
我是歌谣 微信公众号关注前端小歌谣一起学习前端知识 今天继续给大家讲解node中爬虫的讲解
爱学习的前端歌谣
2023/12/10
2550
node之http模块之爬虫和event
肢解 HTTP 服务器构建
所有请求数据都在 request对象中,数据解析,还需要 url, querystring模块
超然
2018/08/03
1.5K0
肢解 HTTP 服务器构建
Node.js基础常用知识点全总结
Node.js是一个javascript运行环境。它让javascript可以开发后端程序,实现几乎其他后端语言实现的所有功能,可以与PHP、Java、Python、.NET、Ruby等后端语言平起平坐。
害恶细君
2022/11/22
3.9K0
Node.js基础常用知识点全总结
前端技术前沿7
使用response.writeHead()函数发送一个HTTP状态200和HTTP头的内容类型content-type,使用response.write()函数在HTTP相应主体中发送文本。
达达前端
2019/07/03
6270
前端技术前沿7
入门 node.js 你必须知道的那些事
exports 是 module.exports 的一个引用,意思就是指向同一块内存地址,node 中真正生效的是 module.exports, 修改 exports 本质上也是修改 module.exports 的值,
IT派
2018/07/30
1.3K0
一些小众却有用的 Node.js 包
yargs 是一个用来处理命令行参数的包,可以帮你处理自行设置的命令行标志和输入的任何类型的数据,其中包括布尔值、浮点数和字符串等。这个包非常简单明了,不需要在项目中编写大量的样板代码。
疯狂的技术宅
2020/10/22
1K0
一些小众却有用的 Node.js 包
nodejs核心api-http模块
我们知道传统的HTPP服务器会由Aphche、Nginx、IIS之类的软件来担任,但是nodejs并不需要,nodejs提供了http模块,自身就可以用来构建服务器,而且http模块是由C++实现的,性能可靠。大部分的node使用者,都是用node来做Web API的,而HTTP模块是提供Web API的基础。为了支持所有的HTTP应用,node中的HTTTP模块提供的API是偏向底层化的。利用HTTP模块,我们可以简单快速搭建一个Web Server。
conanma
2022/01/04
2.9K0
NodeJS
一. 安装及概述 1. 概述: Node.js 不是一门新的语言,是一个JavaScript运行环境, 简单的说 Node.js 就是运行在服务端的 JavaScript。 2. 特点: 1).单线程 2).异步的非阻塞I/O 3).事件驱动 3. 使用场景: 1).后台开发 2).使用node的npm功能,方便的安装,删除,替换第三方模块 3).node的兼容性较好,Windows,Linux,MacOS均可以使用node环境,node从 0.6版本开始,只要装node,会顺带装npm 二. 模块 1. 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式。在Node环境中,一个.js文件就称之为一个模块(module)。 2. 好处: 最大的好处是大大提高了代码的可维护性。其次,编写代码不必从零开始。当一个模块编写完毕,就可以被其他地方引用。我们在编写程序的时候,也经常引用其他模块,包括Node内置的模块和来自第三方的模块。使用模块还可以避免函数名和变量名冲突。相同名字的函数和变量完全可以分别存在不同的模块中,因此,我们自己在编写模块时,不必考虑名字会与其他模块冲突。 3. 注意: exports 和 module.exports 的使用 如果要对外暴露属性或方法,就用 exports 就行,要暴露对象(类似class,包含了很多属性和方法),就用 module.exports。
生南星
2019/07/22
3.4K0
【Node.js】初识Node.js
本文介绍了Node.js的架构特点、优点以及应用,并通过实例介绍了Node.js在Web开发中的基础应用。同时,文章还分享了Node.js的学习资料和备忘,包括IDE的使用和常用工具。
宋凯伦
2018/01/04
23.7K0
【Node.js】初识Node.js
读书笔记-《了不起的node.js》- HTTP
HTTP协议建立在请求和响应的概念上,对应在Node.js中就是有http.ServerRequest和http.ServerResponse这两个构造器构造出来的对象。
用户3258338
2019/07/19
6830
读书笔记-《了不起的node.js》- HTTP
node之http模块之cros和post
我是歌谣 微信公众号关注前端小歌谣一起学习前端知识 今天继续给大家讲解node中post请求的讲解
爱学习的前端歌谣
2023/12/10
2780
node之http模块之cros和post
node运行js获得输出的三种方式
一.通过console.log输出(我最喜欢的) 1.js脚本 1.js var arguments = process.argv.splice(2); //获得入参 var a= arguments[0]; 取第一个 console.log(a) //输出 2.python脚本 test_1.py import os print(os.popen('node 1.js fuck').read()) #打印结果fuck 二.通过文件读写获取 1.js脚本 1.js //npm环境别忘了装了 var
小小咸鱼YwY
2020/07/02
4.5K0
相关推荐
利用 nodeJS 搭建一个简单的Web服务器
更多 >
领券
社区新版编辑器体验调研
诚挚邀请您参与本次调研,分享您的真实使用感受与建议。您的反馈至关重要,感谢您的支持与参与!
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
首页
学习
活动
专区
圈层
工具
MCP广场
首页
学习
活动
专区
圈层
工具
MCP广场