学习NodeJS的一点总结---Express
2015-01-10 21:12
645 查看
在学校NodeJS中遇到了各种各样的问题,尤其是因为版本更新,而产生的一些包的不兼容问题,下面写一下关于Express遇到的问题。
首先引用别人的一下总结:
node的安装分为全局模式和本地模式。
一般情况下会以本地模式运行,包会被安装到和你的应用程序代码的本地node_modules目录下。
在全局模式下,Node包会被安装到Node的安装目录下的node_modules下。
全局安装命令为$npm install -g moduleName。
获知使用$npm set global=true来设定安装模式,$npm get global可以查看当前使用的安装模式。
示例:
npm install express
默认会安装express的最新版本,也可以通过在后面加版本号的方式安装指定版本,如npm install express@3.0.6
npm install <name> -g
将包安装到全局环境中
但是代码中,直接通过require()的方式是没有办法调用全局安装的包的。全局的安装是供命令行使用的,就好像全局安装了vmarket后,就可以在命令行中直接运行vm命令
npm install <name> --save
安装的同时,将信息写入package.json中项目路径中如果有package.json文件时,直接使用npm install方法就可以根据dependencies配置安装所有的依赖包,这样代码提交到github时,就不用提交node_modules这个文件夹了。
2、npm view moduleNames:查看node模块的package.json文件夹
注意事项:如果想要查看package.json文件夹下某个标签的内容,可以使用$npm view moduleName labelName
3、npm list:查看当前目录下已安装的node包
注意事项:Node模块搜索是从代码执行的当前目录开始的,搜索结果取决于当前使用的目录中的node_modules下的内容。$ npm list parseable=true可以目录的形式来展现当前安装的所有node包
4、npm help:查看帮助命令
5、npm view moudleName dependencies:查看包的依赖关系
6、npm view moduleName repository.url:查看包的源文件地址
7、npm view moduleName engines:查看包所依赖的Node的版本
8、npm help folders:查看npm使用的所有文件夹
9、npm rebuild moduleName:用于更改包内容后进行重建
10、npm outdated:检查包是否已经过时,此命令会列出所有已经过时的包,可以及时进行包的更新
11、npm update moduleName:更新node模块
12、npm uninstall moudleName:卸载node模块
13、一个npm包是包含了package.json的文件夹,package.json描述了这个文件夹的结构。访问npm的json文件夹的方法如下:
$ npm help json
此命令会以默认的方式打开一个网页,如果更改了默认打开程序则可能不会以网页的形式打开。
14、发布一个npm包的时候,需要检验某个包名是否已存在
$ npm search packageName
15、npm init:会引导你创建一个package.json文件,包括名称、版本、作者这些信息等
16、npm root:查看当前包的安装路径
npm root -g:查看全局的包的安装路径
17、npm -v:查看npm安装的版本
以上是在网上查找的一些资料。在学习Express框架时,我们一般是建立本地模块,安装方法为
首先编写一空的package.json。这样但你安装模块是,它会自动加依赖添加进去。
安装Express模块:G:\nodejs\MongodeTest>npm install express --save
这样在你的工程下就好建立一个node_modules文件夹,express就安装在里面。
一般Express团队维护了一个可以快速生成项目模板的可执行文件,
安装方法:G:\nodejs\MongodeTest>npm install -g express-generator
这样我们就可以用express来管理了:如查看express版本:
G:\nodejs\MongodeTest>express -V
4.10.0
这个工具提供了一个非常简单的生成一个程序骨架的功能,但是它也有局限,比如它只支持很少的几个模板引擎。而事实上Express几乎支持所有的为node所建的模板引擎。使用
如果你想生成一个支持Jade, Stylus的应用程序,只需要简单的执行下面的命令:
和其它node程序一样,你必须安装依赖:
然后让我们运行它吧!
一般来说非强制性的错误处理一般被定义在最后,下面的代码展示的就是放在别的
在这些中间件里的响应是可以任意定义的。只要你喜欢,你可以返回任意的内容,譬如HTML页面, 一个简单的消息,或者一个JSON字符串。
对于一些组织或者更高层次的框架,你可能会像定义普通的中间件一样定义一些错误处理的中间件。假设你想定义一个中间件区别对待通过XHR和其它请求的错误处理,你可以这么做:
通常
下面的
接下来你需要你创建一个应用程序,和一个redis连接:
接下来是纪录用户在线的中间件。这里我们使用sorted sets, 它的一个好处是我们可以查询最近N毫秒内在线的用户。我们通过传入一个时间戳来当作成员的"score"。注意我们使用 User-Agent 作为一个标识用户的id。
下一个中间件是通过zrevrangebyscore来查询上一分钟在线用户。我们将能得到从当前时间算起在60,000毫秒内活跃的用户。
最后我们来使用它,绑定到一个端口!这些就是这个程序的一切了,在不同的浏览器里访问这个应用程序,你会看到计数的增长。
使用了这个设置后会有一些很棒的小变化。 首先由代理设置的
第二个变化是 req.ip 和
req.ips 的值会被
使用上面的方式运行
原文:http://expressjs.jser.us/guide.html
首先引用别人的一下总结:
node的安装分为全局模式和本地模式。
一般情况下会以本地模式运行,包会被安装到和你的应用程序代码的本地node_modules目录下。
在全局模式下,Node包会被安装到Node的安装目录下的node_modules下。
全局安装命令为$npm install -g moduleName。
获知使用$npm set global=true来设定安装模式,$npm get global可以查看当前使用的安装模式。
示例:
npm install express
默认会安装express的最新版本,也可以通过在后面加版本号的方式安装指定版本,如npm install express@3.0.6
npm install <name> -g
将包安装到全局环境中
但是代码中,直接通过require()的方式是没有办法调用全局安装的包的。全局的安装是供命令行使用的,就好像全局安装了vmarket后,就可以在命令行中直接运行vm命令
npm install <name> --save
安装的同时,将信息写入package.json中项目路径中如果有package.json文件时,直接使用npm install方法就可以根据dependencies配置安装所有的依赖包,这样代码提交到github时,就不用提交node_modules这个文件夹了。
2、npm view moduleNames:查看node模块的package.json文件夹
注意事项:如果想要查看package.json文件夹下某个标签的内容,可以使用$npm view moduleName labelName
3、npm list:查看当前目录下已安装的node包
注意事项:Node模块搜索是从代码执行的当前目录开始的,搜索结果取决于当前使用的目录中的node_modules下的内容。$ npm list parseable=true可以目录的形式来展现当前安装的所有node包
4、npm help:查看帮助命令
5、npm view moudleName dependencies:查看包的依赖关系
6、npm view moduleName repository.url:查看包的源文件地址
7、npm view moduleName engines:查看包所依赖的Node的版本
8、npm help folders:查看npm使用的所有文件夹
9、npm rebuild moduleName:用于更改包内容后进行重建
10、npm outdated:检查包是否已经过时,此命令会列出所有已经过时的包,可以及时进行包的更新
11、npm update moduleName:更新node模块
12、npm uninstall moudleName:卸载node模块
13、一个npm包是包含了package.json的文件夹,package.json描述了这个文件夹的结构。访问npm的json文件夹的方法如下:
$ npm help json
此命令会以默认的方式打开一个网页,如果更改了默认打开程序则可能不会以网页的形式打开。
14、发布一个npm包的时候,需要检验某个包名是否已存在
$ npm search packageName
15、npm init:会引导你创建一个package.json文件,包括名称、版本、作者这些信息等
16、npm root:查看当前包的安装路径
npm root -g:查看全局的包的安装路径
17、npm -v:查看npm安装的版本
以上是在网上查找的一些资料。在学习Express框架时,我们一般是建立本地模块,安装方法为
首先编写一空的package.json。这样但你安装模块是,它会自动加依赖添加进去。
安装Express模块:G:\nodejs\MongodeTest>npm install express --save
这样在你的工程下就好建立一个node_modules文件夹,express就安装在里面。
一般Express团队维护了一个可以快速生成项目模板的可执行文件,
安装方法:G:\nodejs\MongodeTest>npm install -g express-generator
这样我们就可以用express来管理了:如查看express版本:
G:\nodejs\MongodeTest>express -V
4.10.0
这个工具提供了一个非常简单的生成一个程序骨架的功能,但是它也有局限,比如它只支持很少的几个模板引擎。而事实上Express几乎支持所有的为node所建的模板引擎。使用
--help查看一下帮助:
Usage: express [options] Options: -h, --help 输出帮助信息 -V, --version 输出版本号 -e, --ejs 添加 ejs 模板引擎支持 (默认为jade) -H, --hogan 添加 hogan.js模板引擎支持 -c, --css 样式 <引擎> 支持 (less|stylus) (默认为css) -f, --force 强制在非空目录执行
如果你想生成一个支持Jade, Stylus的应用程序,只需要简单的执行下面的命令:
express --sessions --css stylus --ejs myapp create : myapp create : myapp/package.json create : myapp/app.js create : myapp/public create : myapp/public/javascripts create : myapp/public/images create : myapp/public/stylesheets create : myapp/public/stylesheets/style.styl create : myapp/routes create : myapp/routes/index.js create : myapp/views create : myapp/views/index.jade create : myapp/views/layout.jade install dependencies: $ cd myapp && npm install run the app: $ DEBUG=myapp node app
和其它node程序一样,你必须安装依赖:
$ cd myapp $ npm install
然后让我们运行它吧!
错误处理
错误处理的中间件和普通的中间件定义是一样的,只是它必须有4个形参,这是它的形式:(err, req, res, next):
app.use(function(err, req, res, next){ console.error(err.stack); res.send(500, 'Something broke!'); });
一般来说非强制性的错误处理一般被定义在最后,下面的代码展示的就是放在别的
app.use()之后:
app.use(express.bodyParser()); app.use(express.methodOverride()); app.use(app.router); app.use(function(err, req, res, next){ // logic });
在这些中间件里的响应是可以任意定义的。只要你喜欢,你可以返回任意的内容,譬如HTML页面, 一个简单的消息,或者一个JSON字符串。
对于一些组织或者更高层次的框架,你可能会像定义普通的中间件一样定义一些错误处理的中间件。假设你想定义一个中间件区别对待通过XHR和其它请求的错误处理,你可以这么做:
app.use(express.bodyParser()); app.use(express.methodOverride()); app.use(app.router); app.use(logErrors); app.use(clientErrorHandler); app.use(errorHandler);
通常
logErrors用来纪录诸如stderr, loggly, 或者类似服务的错误信息:
function logErrors(err, req, res, next) { console.error(err.stack); next(err); }
clientErrorHandler定义如下,注意错误非常明确的向后传递了。
function clientErrorHandler(err, req, res, next) { if (req.xhr) { res.send(500, { error: 'Something blew up!' }); } else { next(err); } }
下面的
errorHandler"捕获所有" 的异常, 定义为:
function errorHandler(err, req, res, next) { res.status(500); res.render('error', { error: err }); }
在线用户计数
这一小节我们讲解一个小而全的应用程序,它通过Redis记录在线用户数。首先你需要创建一个package.json 文件,包含两个依赖,一个是redis 客户端,另一个是Express。另外需要确认你安装了redis, 可以能过执行$ redis-server来确认:
{ "name": "app", "version": "0.0.1", "dependencies": { "express": "3.x", "redis": "*" } }
接下来你需要你创建一个应用程序,和一个redis连接:
var express = require('express'); var redis = require('redis'); var db = redis.createClient(); var app = express();
接下来是纪录用户在线的中间件。这里我们使用sorted sets, 它的一个好处是我们可以查询最近N毫秒内在线的用户。我们通过传入一个时间戳来当作成员的"score"。注意我们使用 User-Agent 作为一个标识用户的id。
app.use(function(req, res, next){ var ua = req.headers['user-agent']; db.zadd('online', Date.now(), ua, next); });
下一个中间件是通过zrevrangebyscore来查询上一分钟在线用户。我们将能得到从当前时间算起在60,000毫秒内活跃的用户。
app.use(function(req, res, next){ var min = 60 * 1000; var ago = Date.now() - min; db.zrevrangebyscore('online', '+inf', ago, function(err, users){ if (err) return next(err); req.online = users; next(); }); });
最后我们来使用它,绑定到一个端口!这些就是这个程序的一切了,在不同的浏览器里访问这个应用程序,你会看到计数的增长。
app.get('/', function(req, res){ res.send(req.online.length + ' users online'); }); app.listen(3000);
给Express加一层代理
在Express的前端使用一个反向代理,比如 Varnish 或者 Nginx是非常常见的,它不需要额外的配置。在通过app.enable('trust proxy')激活了"trust proxy" 设置后,Express 就会知道它在一个代理的后面,
X-Forwarded-*必须被信任,通常情况下这些头是很容易被伪装的。
使用了这个设置后会有一些很棒的小变化。 首先由代理设置的
X-Forwarded-Proto会告诉程序它是https 还是http 。这个值会影响req.protocol.
第二个变化是 req.ip 和
req.ips 的值会被
X-Forwarded-For列表里的地址取代。
调试 Express
Express使用 debug 模块来输出信息。如果想看到这些信息,可以在运行你的程序时设置DEBUG环境变量为
express:*,调试信息会输出在终端里 。
$ DEBUG=express:* node app.js
使用上面的方式运行
hello world的例子,将会输出下面的内容
express:application booting in development mode +0ms express:router defined get /hello.txt +0ms express:router defined get /hello.txt +1ms
原文:http://expressjs.jser.us/guide.html
相关文章推荐
- Nodejs学习总结 -Express入门(一)
- Nodejs学习总结 -Express 登录注册示例(二)
- 学习QTP的一点总结
- 关于DNN Module开发学习以来的一点总结
- 关于PCA算法的一点学习总结
- Altium Designer学习的一点总结
- 黑马程序员的Java总结暂停,学习计划有一点改变,下面全心学习ios
- 初学习cocos2d小结(感冒了,几行代码都记不住...稍微复杂一点的动作序列看不下去,还是总结一下这两天看的东西)
- [总结] XPO (eXpress Persistent Objects) 学习总结一
- Nodejs入门学习,nodejs web开发入门,npm、express、socket配置安装、nodejs聊天室开发
- Nodejs入门学习,nodejs web开发入门,npm、express、socket配置安装、nodejs聊天室开发
- 关于嵌入式系统学习的一点经验总结
- 学习htmlcontrol的一点总结
- 我学习spring的一点小总结(二)
- C#线程学习的一点体会和总结
- shell学习的一点总结
- Tapestry学习中一点总结
- 我学习SVN的一点总结
- 关于学习CCNA的一点经验总结
- 学习SSD4的一点总结