日期:2014-05-16  浏览次数:20803 次

用node.js建博客(四) - express中的404处理

在上一篇中,我已经实现了如下管理功能,

?

  • 将所有markdown文件(即:*.md文件),统一放到views/blogs目录下
  • 将/blogs/*.html的url, 映射到markdown文件
  • 在首页index.jade中,添加文章的链接

  • 注意:

    本片内容不太适合Express3.x, 建议参考附件中的 nodeblog_express3.x.zip Demo来看

    ?

    ?

    ?

    本片介绍如何使用express为nodeblog带来404错误处理

    实现功能

    1. 访问的链接存在的时候,显示页面
    2. 不存在,则显示404页面, 当然,这里的404是统一处理

    ?

    技术准备:(2个)

    1. Node.js中path模块的使用:

    path模块提供一些处理文件路径的功能,采用require('path')来使用。这里我只使用到两个方法:

    ?

    1). path.normalize(strPath)

    将路径标准化, 如'/etc//hosts', 会被标准化成'/etc/hosts'

    '/' 分隔符,如果在windows环境中会转换成'\'

    ?

    2). path.exists(filePath, function(exists))

    判断路径是否存在,true: 存在, false: 不存在,该方法还有个同步版: path.existsSync(filePath):boolean

    2. Express中的路由控制:

    1).?什么是路由?

    例如下面代码可以截获 '/users/:id' url, 其中id是url参数 (REST-ful url! You are right!)

    ?

    app.get('/users/:id', function  (req, res, next) {
        res.send('id:' + req.params.id)
        res.end();
    })?		

    用 curl 看一下效果:

    ?

    ?

    ? 2). 使用next做路由控制:

    当一个url可以被多个路由匹配,则在response关闭前,调用next()进行路由跳转

    ?

    app.get('/users/:id', function  (req, res, next) {
        console.log('id: ' + req.params.id);
        next();
    })
    
    app.get('/users/*', function  (req, res, next) {
        console.log('list all user');
        res.send('list all users \n');
    })

    ? 调用next()做路由跳转, 跳转规则按照app.get声明顺序执行。


    ?

    开始为nodeblog添加404处理:(4步)

    1. 调整app.js中的express配置

    提高对 public/* 资源路由的优先级:

    ?

    var express = require('express');
    
    var app = module.exports = express.createServ