单页面应用的History路由模式express后端中间件配合

更新日期: 2019-08-30阅读: 2.8k标签: express

这篇文章主要分享一下通过html5的history api的时候,使用NodeJS后端应该如何配置,来避免产生404的问题,这里是使用的express的框架,主要是通过connect-history-api-fallback这个中间件来实现的。


前言

这里使用vue-router来实现的单页应用为例,访问http://cnode.lsqy.tech,进入首页,点击下面的tab栏,一切都是很正常的,但当这时候你 ctrl+command+R 或 点击浏览器的刷新按钮 或 在地址栏上再敲一下回车,总之就是刷新,发现就会出现404了,比如这样的错误Cannot GET /message/,因为默认浏览器会认为你是在请求服务端的路由,服务端那边没有对应的处理,所以自然就会出错了,下面来引入connect-history-api-fallback这个中间件,来无痛使用优雅的History路由模式。


引入connect-history-api-fallback

首先看它的介绍Middleware to proxy requests through a specified index page, useful for **Single Page Applications** that utilise the HTML5 History API. 中文意思就是一个能够代理请求返回一个指定的页面的中间件,对于单页应用中使用HTML5 History API非常有用。


用法

经典的npm安装,注意将其作为依赖项,加上--save

npm install --save connect-history-api-fallback

接下来是在express的简单使用

var http = require('http');
var express = require('express');
var ecstatic = require('ecstatic');
var history = require('connect-history-api-fallback');

var app = express();

app.use(history());
app.use(ecstatic({ root: __dirname + '/dist' }));

http.createServer(app).listen(6565);

这样配置完之后,再重新restart一下项目,你就会发现现在可以非常顺畅的使用了,不管你是刷新了浏览器还是直接通过url从外部访问都不会出现404的结果了。 另外,connect-history-api-fallback还有一些可配置的Options项,这个如果需要详细了解可以仔细看看其API的调用即可


总结

其实有时候对于单页面应用,虽然是单页的,但是也会有很多不仅仅是必须从首页进去的情况,比如要分享某个页面,这样我们希望能够直接通过这个简洁的url来跳到这个指定的页面,但是如果不做上面的配置的话就会出现404这样的错误了,其实这样的话也算是接管了传统的服务端路由,来完全交给前端来处理路由跳转了,这样以后的url就非常简洁优雅了。

文章首发自个人博客单页面应用的History路由模式express后端中间件配合 

 

链接: https://www.fly63.com/article/detial/5034

深入理解express框架的匹配路由机制

现在node的web框架有很多,除express 还有koa egg等等。 但它们本质上还是基于原生node框架的http。其实框架都大差不差,主要是观摩和学习。本篇文章主要记录下自己在node爬坑之路上的经历和收获

Node.js Express 的使用

Node.js 的 Express 估计是那种你第一次接触,就会喜欢上用它的框架。因为它真的非常简单,直接。在当前版本上,一共才这么几个文件:

node express使用HTML模板

一般我们在做node web项目的时候,想使用我们平时常用的html模板,express默认使用jade模板,本身是没有HTML的,那么如何实现呢?上面实际上是调用了ejs的.renderFile()方法

express中间件原理connect

不知道用了express.js的你有没有这样的疑问:app.use为什么可以添加一个又一个中间件?connect是如何区分普通中间件和错误中间件的?中间件处理函数中的next指代的又是什么?

express 的 middleware 设计

还没用express写过server,先把部分源码撸了一遍,各位大神求轻拍。express入口文件在lib文件夹下的express.js,其向外界暴露了一些方法。

node express上传大文件报错

在项目开发当中有时候需要上传大文件,这时候你的代码写的完全正确,等了好半天文件上传完成了,但服务器突然在控制台报错一个错误,request entity too large,那对于这个棘手的问题改如何解决呢?

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!