与Node.js服务器的Angularjs html5Mode(true)页面重新加载错误

时间:2016-01-15 18:16:04

标签: javascript angularjs node.js

我在Angular js中使用了routeProvider和stateProvider,HTML5模式为true。 在刷新页面之前,一切正常。

我正在使用Node.js服务器,我没有得到在服务器端写的内容,所以我没有得到“找不到”错误。

请帮助我,我没有得到其他类似帖子的任何答案。

这是状态提供者的代码

   $stateProvider
  .state("/", angularAMD.route({
    url: '/',
    templateUrl: 'Default/default.html'
  }))
  .state("aboutUs", angularAMD.route({
    url: '/aboutUs',
    templateUrl: 'AboutUs.html'
  }))
  .state("contactUs", angularAMD.route({
    url: '/contactUs',
    templateUrl: 'ContactUs.html'
  }))
  .state("order", angularAMD.route({
    url: '/order',
    templateUrl: 'order/order.html',
    controllerUrl: "order/OrderController"
  }))
  .state("signin", angularAMD.route({
    url: '/signin',
    templateUrl: 'LoginSignup/Login.html',
    controllerUrl: "LoginSignup/LoginController"
  }))
  .state("dashboard", angularAMD.route({
    url: '/dashboard',
    templateUrl: 'Dashboard/dashboard.html',
    controllerUrl: "Dashboard/dashboardController"
  }))
  .state("thankYou", angularAMD.route({
    url: '/ThankYou.html',
    templateUrl: 'ThankYou.html'
  }));
$urlRouterProvider.otherwise("/");
$locationProvider.html5Mode(true);

2 个答案:

答案 0 :(得分:3)

在Express

中使用以下代码段

我在nodejs服务器上用Express.js修复了我的应用程序。

// ### CATCH REFRESH TO INDEX ###
app.all('/*', function(req, res, next) {
  // Just send the index.html for other files to support HTML5Mode
  res.sendFile('public/index.html', { root: __dirname });
});

它查找页面刷新的正确位置。

答案 1 :(得分:0)

您需要在刷新时使用角度代码加载索引文件,就像Joe Lloyd所说。为了允许您的其他路由工作(返回数据的路由),您可以检查它们并调用下一个函数(如果匹配)。这是一个例子:

app.use((req, res, next) => {

    // if the requested route matches a route that should return data then
    // we check for it here and call the next function and return, which will skip over serving the index.html page
    if(req.url.indexOf('/get-data-route')){
        return next();
    }

    // if the route does not match an API route serve the index file
    // this is using a template string, if you are using an older version of node
    // replace the template string with a regular string
    res.sendFile(`${__dirname}/index.html`);
});