Express4.2.0安装和使用(一)
现在很多关于Node.js的书写关于Express的安装和使用都是比较旧的版本,现在新的版本安装和使用其实已经有一定的变化,刚好本人最近学习Node.js和Express,就顺道分享一下。本人主要讲在windows下的安装和使用,在linux下的其实大同小异,用linux的兄弟们肯定更熟软件的安装。
安装Node.js没什么大的变化,同样是官网下载.msi文件安装即可,安装Express执行命令:
npm start
其实这个语句最终会执行以下语句
node ./bin/www
这个www文件是这样的:
可以看到默认是使用3000端口,可以在这里进行修改
express框架基本描述
通过express自带的创建方式创建项目后,项目文件夹内一般包含这几个内容
bin文件夹:该文件只包含了www这个文件,是用于web应用启动的
node_module文件夹:包含了该项目依赖的包和模块
public文件夹:存放静态文件,包括图片、css等
routes文件夹:存放该框架MVC中的C(控制)部分
views文件夹:存放该框架MVC中的V(视图)部分
app.js文件:对该应用进行配置
package.json:该web应用的基本信息,npm install根据该信息可以为应用安装所需的依赖
关于express的各种方法
express的各种方法主要用在app.js文件中,在该文件中进行一些路由设置、模版引擎设置、文件路径设置等。
set方法
set方法主要是设置一些参数,当前set主要用的是以下两句
- app.set('views', path.join(__dirname, 'views'));
- app.set('view engine', 'ejs');
- 第一句表示设置前台模版的路径为工程文件夹下的views文件夹下
- 第二句表示使用的前台模版引擎为ejs
- use方法
- use方法表示设置当用户访问时将调用设定的中间件,基本用法如下:
- app.use(function(req, res, next){
- //dosometing;
- next();
- });
所谓的中间件,可以理解为从底层往上层传输前,进行一定处理的函数或过程。
当有用户访问web应用时,便会调用use方法设置好的中间件函数,在该函数处理完之后,调用了next()方法,该方法调用下一个设置好的中间件函数
在上面的use用法中,所有用户请求都会调用设置的中间件函数。为了只让某些用户请求调用特定的中间件函数,use还提供了如下用法:
- app.use("/", function(req, res, next){
- //dosomething;
- next();
- });
该语句中只对根目录的请求调用该中间件函数
get方法
get方法也是设置中间件函数,它的特点在于只响应用户的get方法请求,并且没有像use那样具备next()方法。
- app.get("/", function(req, res){
- //dosomething;
- });
上面的代码会响应用户对根目录的get请求
post方法
post方法与get方法类似,特点是只响应用户的post方法请求,其余与get类似,不做介绍
all方法
用户对all方法指定路径的所有访问,都会得到all方法的响应,可以吧all方法看作是get和post方法的结合。
纵观app.js
- //app.js
- var express = require('express');
- var path = require('path');
- var favicon = require('static-favicon');
- var logger = require('morgan');
- var cookieParser = require('cookie-parser');
- var bodyParser = require('body-parser');
- var routes = require('./routes/index');
- var users = require('./routes/users');
- var app = express();
- // view engine setup
- app.set('views', path.join(__dirname, 'views'));
- app.set('view engine', 'ejs');
- app.use(favicon());
- app.use(logger('dev'));
- app.use(bodyParser.json());
- app.use(bodyParser.urlencoded());
- app.use(cookieParser());
- app.use(express.static(path.join(__dirname, 'public')));
- app.use('/', routes);
- app.use('/users', users);
- /// catch 404 and forward to error handler
- app.use(function(req, res, next) {
- var err = new Error('Not Found');
- err.status = 404;
- next(err);
- });
- /// error handlers
- // development error handler
- // will print stacktrace
- if (app.get('env') === 'development') {
- app.use(function(err, req, res, next) {
- res.status(err.status || 500);
- res.render('error', {
- message: err.message,
- error: err
- });
- });
- }
- // production error handler
- // no stacktraces leaked to user
- app.use(function(err, req, res, next) {
- res.status(err.status || 500);
- res.render('error', {
- message: err.message,
- error: {}
- });
- });
- module.exports = app;
以上就是express快速新建一个项目时生成的app.js文件,下面对其中的部分语句进行解析
- app.use(favicon());
favicon()属于connect框架(Node.js一个中间件框架)的内建中间件,使用默认favicon图标,如果想让项目改用自己的图标,则改为:
- app.use(favicon(__dirname + "/public/images/myIcon.ico")));
- 之后访问localhost:3000/favicon.ico刷新缓存。根据笔者调试和阅读源码,除非访问/favicon.ico,否则无法刷新图标,因此建议考虑在html页面中获取图标资源
- </pre><pre name="code" class="plain">
- app.use(logger('dev'));
该语句定义项目以开发模式启动,在该模式下,当用户进行访问时,会有如下输出
- app.use(bodyParser.json());
- app.use(bodyParser.urlencoded());
以上语句用于解析请求体
转自:http://blog.csdn.net/sadoshi/article/details/28308099