一、目录详解
bin:启动配置文件,在 www 里修改运行端口号
node_modules:存放所有的项目依赖库,就行java存放架包
public:用于存放静态资源文件 图片,CSS,JAVASCRIPT文件..
routers:路由文件相当于springmvc中的Controller,ssh中的action
views:存放页面的地方
package.json:项目依赖配置及开发者信息。
app.js:应用核心配置文件,项目入口。
二、app.js配置详解
var express = require('express');//引用express
var path = require('path');//服务器路径
var favicon = require('serve-favicon');//网页图标及缓存中间件
var logger = require('morgan');//日志功能,需要手动配置
var cookieParser = require('cookie-parser');//解析cookie
var bodyParser = require('body-parser');//解析request,respose参数
var index = require('./routes/index');//注册路由的位置
var users = require('./routes/users');
var app = express();
// view engine setup
//设置视图模板为ejs
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
// uncomment after placing your favicon in /public
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
//设为开发模式输出 信息
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(require('stylus').middleware(path.join(__dirname, 'public')));//自动解析stylus文件为css
app.use(express.static(path.join(__dirname, 'public')));//静态资源文件夹为public
app.use('/', index);//设置url为/引向index路由
app.use('/users', users);//设置url为/user引向user路由
// catch 404 and forward to error handler 捕捉404错误信息
app.use(function(req, res, next) {
var err = new Error('Not Found');
err.status = 404;
next(err);
});
// error handler 错误处理中间件
app.use(function(err, req, res, next) {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : {};
// render the error page
res.status(err.status || 500);
res.render('error');
});
module.exports = app;
三、路由初步
var express = require('express');
var router = express.Router();
/* GET home page. */
router.get('/', function(req, res, next) {
res.render('index', { title: 'Express' });
});
//中间件拦截,进入index的路由会被拦截,输出地址信息以后进入执行next()后面,没有next()则不会向下执行
router.use('/',(req,res,next)=>{
console.log('收到请求,地址为:' + req.url);
next();
});
router.get('/',(req,res,next)=>{
console.log('OKK');
next();
});
router.get('/home',(req,res,next)=>{
console.log('OK');
next();
});
router.get('/home', function(req, res, next) {
res.render('index', { title: '马群' });
});
module.exports = router;
express router主要分为use,get,post 3个方法,use可以拦截指定url开头的所有请求 ‘/’时拦截所有请求。
router共接收三个参数,req 指的是request, res指 response, next 为执行完后继续向下匹配符合的路由
打开浏览器输入
http://localhost:3000/home
可以看到控制台执行结果
/home 的url执行顺序为 router.use('/',(req,res,next))-》router.get('/home',(req,res,next))-》router.get('/home',(req,res,next))
(req,res,next)=>{}
这样写法为ES6语法的箭头函数,等价于
function(req, res, next){}