初学Nodejs,特意在此记录学习过程,算是对这段时间的一个summary吧,相互勉励,共同进步嘛,Now Begin:

1、什么是nodejs

nodejs 是一种基于事件驱动、非阻塞I/O模型,用于方便地搭建响应速度快且易于拓展的网络应用。基于Google V8引擎进行封装,V8引擎执行javascript效率高、速度快。nodejs其实就是一种解析器,用于进行各种运算。nodejs中内置了诸如文件 操作(fs)、http or https、Buffer等模块或对象。

2、如何安装nodejs

nodejs的安装直接在https://nodejs.org/下载并安装即可。

3、入门实例

这里先创建一个简单的http服务并返回“hello nodejs”:

var http = require("http");
var server = http.createServer(function(req,res){
if (req.url !== "/favicon.ico") { res.writeHead(200,{"Content-Type":"text/plain"});
res.write("hello nodejs");
res.end(); req.on("end",function(){
console.log("客户端请求数据全部接收完毕");
});
}
}).listen(1337,"localhost");
console.log("http服务器已创建并开始监听");

将上述代码保存为js文件如:http_server.js,然后 在cmd窗口中切换至该文件的路径后,使用命令:node http_server.js,即可创建一个简单的http服务器。这时再在浏览器中输入:http://www.127.0.0.1:1337,观察浏 览器窗口输出:hello nodejs,并且cmd窗口中输出:http服务器已创建并开始监听(换行)客户端请求数据全部接收完毕。这样一个简单的http服务创建与请求处理就 完成了。下面是一些说明:

  • 使用require语句可以直接导入nodejs内置模块,即这里的http模块(一般来讲一个模块就是一个封装好各种功能的js文件,使用时直接require即可)
  • 导 入http模块后,使用http自带的createServer方法创建一个http服务,该方法含有一个function参数,理解为回调函数,即 http服务创建成功后执行的函数。该回调函数自带req、res分别代表http的request、response。if判断只是过滤掉对浏览器收藏 夹图标的请求,可以忽略(ps:如果不过滤掉的话,可能你的cmd窗口就会打印出2条数据,因为不仅请求了"/"根路径,还顺带请求了" /favico.ico"路径)
  • 使用res对象的writeHead方法,写入http响应的头文件,指定状态码200、响应类型为text/plain。write方法用于直接将该文本响应至浏览器端,end表示响应结束
  • on表示为req对象注册一个end事件,当请求结束时该事件会被自动调用,即基于事件驱动。end事件正常响应后使用内置回调function自动处理
  • 创建完http服务之后还需指定该服务所监听的具体url、端口等,使用listen可以做到
  • console.log表示在cmd窗口直接打印输出

4、Exports

Exports对象是当前模块的一个导出对象,用于导出模块内的公有属性或方法。这样其它模块可以使用require直接导入使用,模块导出对象默认为一个普通对象,如果想改成一个函数的话,可以如下操作:

module.exports = function(){
console.log("hello world");
};

5、Require的路径解析规则

require函数支持以斜杠(/)或盘符(c:)开头的绝对路径,也支持以./开头的相对路径。

  • 如果传给require的是node_modules下的默认模块,不做路径解析,直接返回内部模块的导出对象,如:require("fs");
  • nodejs 定义了一个node_modules目录用于存放模块,如某个模块的绝对路径为/home/user/hello.js,在该模块中使用 require("foo/bar")的方式请求模块时,依次请求以下路径:/home/user/node_modules/foo/bar、 /home/node_modules/foo/bar、/node_modules/foo/bar

 6、NPM包使用

npm是同nodejs一起安装的一个包管理工具,使用npm可以安装各种模块的包。npm的使用比较简单,比如想安装包名为argv的包,直接在cmd窗口中输入:npm install argv。

npm包的安装时有本地安装和全局安装两种,全局安装使用:npm install -g argv,全局安装和本地安装的区别是,本地安装的包如果要在cmd窗口中引用,应该切换到该包所在目录方可,全局安装的包不用切换目录。

 7、关于Webstorm&Express

Express是基于nodejs的一种web开发框架,同java中ssh框架一般,封装好了很多现有模块,比如Request、Response、Router等,提供诸多强大特性帮助创建各种web和移动设备应用。

关于Express具体介绍http://www.expressjs.com.cn/,Webstorm对js文件的支持很是不错,被誉为The Smartest JavaScript IDE,下面着重介绍在Webstorm下创建一个简单项目:

  1. 下载安装Webstorm,\\192.168.20.50\Tech\soft\开发工具\WebStorm
  2. 打开IDE后选择:File -> New Project如图,,Template一般选择EJS(一种视图模板引擎),设置好后直接点击Create即可创建一个基于Express的Nodejs项目(ps:一般Create后可能会要求指定nodejs的源码,这时直接在官网下载并指定即可)
  3. 刚创建好的项目结构如图,其 中,bin\www文件代表项目启动配置,包括端口号设置等。node_modules目录保存当前项目自动引入的一系列模块(如果想再导入其它模块的话 直接通过npm安装再将其复制到此即可)。public目录存放引用的资源文件,包括images、css等。routes存放路由模块,负责处理各种 url请求。views目录保存视图资源。app.js文件负责引用各种中间件模块以及错误处理等。package.json文件存放部分配置信息。
  4. app.js文件,如图,其中,use表示对所有请求方法均拦截处理,使用routes或者users进行具体url请求处理。相当于路由中转功能。
  5. index.js文件代码如下,对相应的url请求进行分别处理:
    var express = require('express');
    var router = express.Router();
    /* GET home page. */
    router.get('/', function(req, res, next) {
    if(req.url !== "/favicon.ico"){
    res.render("index",{title:"Express"});
    next();
    }
    });
    router.use("/list",function(req,res,next){
    if(req.url !== "/favicon.ico"){
    console.log("router.use/add请求返回信息");
    //next();
    }
    });
    module.exports = router;
  6. 在浏览器中输入:http:localhost:3000,观察输出如下:至此,一个简单的Express应用就完成了。

完整的一个增删改查实例:

点击下载Nodejs_crud

nodejs初印象的更多相关文章

  1. Vue.js之初印象

    一.背景 MVVM模式,很多人在说在用,好吧,我落后了,我目前的项目木有用到MVVM模式的框架,vuejs,reactjs,angularjs,nonono,自己去捣鼓过ng,项目木有用到.实在不敢称 ...

  2. Django初印象之视图(view)

    一.view的初印象 一个视图函数(类),简称视图.我们发起web请求时,返回的web响应.[大家约定成俗将视图放置在项目(project)或应用程序(app)目录中的名为views.py的文件中.] ...

  3. Mac下nodeJS初体验

    Mac下nodeJS初体验 这两天博主出门在外,抽空体验一下大名鼎鼎的node 安装 brew install node 安装测试 $ node -v v8.4.0 运行本地脚本 用文本编辑器编辑一段 ...

  4. 初印象至Vue路由

    初印象系列为快速了解一门技术的内容,后续会推出本人应用这门技术时发现的一些认识. Vue路由和传统路由的区别: Vue路由主要是用来实现单页面应用内各个组件之间的切换,同样支持传递参数等功能.而传统路 ...

  5. OpenCL学习笔记(一):摩尔定律,异构计算与OpenCL初印象

    欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld.  技术交流QQ群:433250724,欢迎对算法.技术.应用感兴趣的同学加入. 关于摩尔定律: 摩尔定律19 ...

  6. [强化学习]Part1:强化学习初印象

    引入 智能 人工智能 强化学习初印象 强化学习的相关资料 经典书籍推荐:<Reinforcement Learning:An Introduction(强化学习导论)>(强化学习教父Ric ...

  7. Three 之 Animation 初印象

    Animation 初印象 动画效果 播放动画需要基本元素 AnimationMixer 一个对象所有动作的管理者 用于场景中特定对象的动画的播放器.一个对象可能有多个动作,Mixer 是用来管理所有 ...

  8. Nodejs初阶之express

    PS: 2014/09/24 更新<Express 4.X 启航指南>,欢迎阅读和评论:)   老规矩,开头部分都是些自娱自乐的随想,想到哪写到哪... 到今天俺已经在俺厂工作俩年零几天了 ...

  9. nodejs 初入

    nodejs 模块路径 1.内置模块 如果传递给require函数的是NodeJS内置模块名称,不做路径解析,直接返回内部模块的导出对象,例:require('http'). 2. nodejs  支 ...

随机推荐

  1. Android 屏幕适应

    基础知识: 屏幕密度: Density-independent pixel (dp):密度无关像素单位(一个相对的值).1dp 的大小相当于一个 160 dpi 屏幕上一个像素的大小. 计算方法:px ...

  2. 【OCP-12c】2019年CUUG OCP 071考试题库(75题)

    75.Which statements are correct regarding indexes? (Choose all that apply.) A. A non-deferrable PRIM ...

  3. video视频内容填充整个播放空间方法

    关于video视频内容填充整个播放空间方法一般上传的视频都没法占满video,看起来很不美观,解决办法很简单video{ object-fit:fill;}

  4. 根据IP获取IP定位

    http://ip.taobao.com/service/getIpInfo.php?ip=27.17.60.152 {,"}} 不确定是否有次数限制

  5. [Objective-C语言教程]复合对象(33)

    在Objective-C中,可以在类集群中创建子类,该类集合定义了一个嵌入在其中的类. 这些类对象是复合对象.你可能想知道什么是类集群,下面首先了解什么是类集群. 1. 类集群 类集群是基础框架广泛使 ...

  6. 【vim】简介与基本配置

    vim是一款非常强大的文字编辑软件,是各种类UNIX系统标配的文本编辑工具.相信此文的读者对它应该不会陌生,在这里就不做介绍了. 1.为什么要使用vim 在认识vim之前,我用过好多IDE:Visua ...

  7. wireshark 1.10.0 编译 及 协议解析部分的一些变化

    wireshark不久前升级到1.10.0稳定版,这个版本正如其版本号一样,相比1.8.x有较大变化. 我们先说说在windows下编译的问题,1.8.4/1.8.6版本的编译见我的文章:http:/ ...

  8. 通过UIColor转换为UIImage

    + (UIImage *)createImageWithColor:(UIColor *)color { CGRect rect=CGRectMake(0.0f, 0.0f, 1.0f, 1.0f); ...

  9. mybaits中"#"和"$"的区别

    动态 sql 是 mybatis 的主要特性之一,在 mapper 中定义的参数传到 xml 中之后,在查询之前 mybatis 会对其进行动态解析.mybatis 为我们提供了两种支持动态 sql ...

  10. iOS开发debug跟release版本NSLog屏蔽方法

    简单介绍以下几个宏: 1) __VA_ARGS__ 是一个可变参数的宏,这个可变参数的宏是新的C99规范中新增的,目前似乎只有gcc支持(VC6.0的编译器不支持).宏前面加上##的作用在于,当可变参 ...