搜索
有爱,有技术,有你^_^)y
╱人◕‿‿◕人╲订下契约(注册新用户)

合作站点账号登陆

QQ登录

只需一步,快速开始

快捷导航
查看: 352|回复: 5
收起左侧

[软件应用技术] nodeJS|开发入门

[复制链接]

签到天数: 1 天

连续签到: 1 天

[LV.1]初来乍到

15

主题

15

好友

3464

积分

序章

积分
3464
发表于 2016-6-17 14:33:20 | 显示全部楼层 |阅读模式

╱人◕‿‿◕人╲定下契约

您需要 登录 才可以下载或查看,没有账号?╱人◕‿‿◕人╲订下契约(注册新用户)

x
从自己博客搬运的一些自己写的东西
=================================================
简单的说 Node.js 就是运行在服务端的 JavaScript
它基于google v8引擎,而且相比起php等语言来说,它自带了web service的功能(无需nginx,apache)
那么这里为了用起来顺手一点直接win下从官网download了node.exe
然后配置了path环境变量
使用require函数来载入http模块。
并且创建一个http server
[mw_shl_code=javascript,true]    var http = require('http');
    http.createServer(function (request, response) {
            response.writeHead(200, {'Content-Type': 'text/html'});
            response.end('<h1>Hello World</h1>\n');
    }).listen(8888);
    console.log('Server running at http://127.0.0.1:8888/');[/mw_shl_code]
测试后it works.

                               
登录/注册后可看大图

在这里,匿名函数直接被当做一个参数传递给了createServer
================================================================================================
事件驱动:
nodeJS同时充当了web server和脚本
而请求是异步的,apache和nginx等会对每一个请求新建一个进程,来执行单独的php脚本
那么node如何办到呢?
我们给某个函数传递了一个参数,这个参数是一个匿名函数。
当发生一个事件(比如新的请求到达)时,使用回调的方法,来执行这个被传递的函数。
================================================================================================
require函数可以加载一个内置模块,或者自己编写的js.
在加载自己编写的js时,请注意路径加上./ 作为当前目录
返回一个对象,可以调用其方法.
比如,我在server.js里编写了一个start方法。
在其尾部加入一行代码
exports.start = start; 用来导出模块
这样就可以在index中,实例化这个模块为一个对象,并调用其中的start函数
[mw_shl_code=javascript,true]    var server = require("./server");
    server.start();[/mw_shl_code]

评分

参与人数 1宅币 +30 收起 理由
蛋挞妹。 + 30 o(* ̄▽ ̄*)ブ 发糖

查看全部评分

签名被小宅喵吞掉了~~~~(>_<)~~~~
回复

使用道具 举报

签到天数: 1 天

连续签到: 1 天

[LV.1]初来乍到

15

主题

15

好友

3464

积分

序章

积分
3464
 楼主| 发表于 2016-6-17 14:36:50 | 显示全部楼层
本帖最后由 math1as 于 2016-6-17 14:42 编辑

简单的route功能:
由于nodeJS其实除了是脚本语言外,也直接充当了web server的角色。
所以我们可以直接在其中实现路由的功能。
在index.js中源码如下

[mw_shl_code=javascript,true]    var server=require('./server');
    var route=require('./route');
    server.start(route.route); //这里是传递了route模块的一个导出函数(方法)
[/mw_shl_code]
这里调用其他自写模块时,用使用模块名.方法来把它当做一个参数进行传递。
showpage.js中我们写入对传入pathname的处理函数
其实这就是MVC框架中的controller 我们在这里实现控制器的功能server.js则是核心,在这里用createSever方法来创建一个新的http server

[mw_shl_code=javascript,true]   
var http = require('http');
    var url = require('url'); //用于解析请求的文件名
    var querystring = require('querystring'); //用于解析请求的参数
server.js则是核心,在这里用createSever方法来创建一个新的http server

[mw_shl_code=javascript,true]    var http = require('http');
    var url = require('url'); //用于解析请求的文件名
    var querystring = require('querystring'); //用于解析请求的参数
    function start(route)
    {
            function server(request, response) {
            var pathname=url.parse(request.url).pathname;            response.writeHead(200, {'Content-Type': 'text/html'});
            var htm=route(pathname); //通过路由来获得源码            response.writ(htm);
            }
            http.createServer(server).listen(8888);
    }
    exports.start = start;[/mw_shl_code]



签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

签到天数: 1 天

连续签到: 1 天

[LV.1]初来乍到

15

主题

15

好友

3464

积分

序章

积分
3464
 楼主| 发表于 2016-6-17 14:36:56 | 显示全部楼层
本帖最后由 math1as 于 2016-6-17 14:42 编辑

同时 中间调用了路由函数,来对用户提交的pathname进行匹配,返回其想要的数据
route.js是路由函数所在地
其中用一个handle数组来保存pathname对应的控制函数。
我们新的路由定义可以在这里进行添加。
那么检测存在与否直接用typeof就行了,如果没有的话是返回Null的。

[mw_shl_code=javascript,true]    var showpage=require('./showpage');
    var handle={};
    handle['/']=showpage.home;
    handle['/home']=showpage.home;
    handle['/blog']=showpage.blog;
    function route(pathname)  //路由函数,接受传递入的参数,并进行判断是否存在
    {
      if(typeof(handle[pathname])==='function')
      {
              return handle[pathname](); //调用处理
      }
      else
      {
              return("404 您的页面没有找到");
      }
    }
    exports.route = route;[/mw_shl_code]

这样就大体实现了nodeJS的简单路由功能。
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

签到天数: 39 天

连续签到: 2 天

[LV.5]常住居民I

46

主题

53

好友

3万

积分

版主

积分
34081

星座|双鱼座全职高手|叶修全职高手|黄少天全职高手|苏沐橙全职高手|苏沐秋全职高手|叶修全职高手|兴欣魔道祖师|蓝忘机魔道祖师|魏无羡盗墓笔记|解语花盗墓笔记|吴邪盗墓笔记|张起灵盗墓笔记|潘子盗墓笔记|王胖子国庆70周年纪念

发表于 2016-7-11 17:12:03 | 显示全部楼层
可以用这个再加git和npm做hexo。
回复 支持 反对

使用道具 举报

签到天数: 39 天

连续签到: 2 天

[LV.5]常住居民I

46

主题

53

好友

3万

积分

版主

积分
34081

星座|双鱼座全职高手|叶修全职高手|黄少天全职高手|苏沐橙全职高手|苏沐秋全职高手|叶修全职高手|兴欣魔道祖师|蓝忘机魔道祖师|魏无羡盗墓笔记|解语花盗墓笔记|吴邪盗墓笔记|张起灵盗墓笔记|潘子盗墓笔记|王胖子国庆70周年纪念

发表于 2016-7-26 14:51:27 | 显示全部楼层
好像可以用这个+hexo搭建博客。

点评

才发现我回过贴了抱歉。  发表于 2016-7-26 14:52
回复 支持 反对

使用道具 举报

签到天数: 1 天

连续签到: 1 天

[LV.1]初来乍到

15

主题

15

好友

3464

积分

序章

积分
3464
 楼主| 发表于 2016-7-27 21:35:27 | 显示全部楼层
尘埃之里 发表于 2016-7-26 14:51
好像可以用这个+hexo搭建博客。

o o嗯,是的,很多人都用hexo,把自己的blog托管到github上面了。
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

本版积分规则

小黑屋|手机版|技术宅(Z站|基宅) ( 粤ICP备18082987号-1 )

GMT+8, 2025-6-16 18:32 , Processed in 0.123712 second(s), 16 queries , Redis On.

Copyright © 2018 技术宅社区

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表