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

Posted lsqy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单页面应用的History路由模式express后端中间件配合相关的知识,希望对你有一定的参考价值。

这篇文章主要分享一下通过html5history 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就非常简洁优雅了。

reference: github地址connect-history-api-fallback

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

以上是关于单页面应用的History路由模式express后端中间件配合的主要内容,如果未能解决你的问题,请参考以下文章

单页面路由的history模式后端配置

前端路由原理之 hash 模式和 history 模式

nignx部署Vue单页面刷新路由404问题解决

Vue-cli创建项目从单页面到多页面2-history模式

vue-router路由跳转原理

关于使用express作为spa应用服务的问题