我的angular.js / express / node应用程序中的路由和发布请求问题

时间:2018-03-05 15:58:31

标签: angularjs express post routes

这是我的角度控制器和我的帖子请求:

$http.post('/formDevis', $scope.formData).then(function(response) {
  if (response.data) {
    $('#successModal').modal();
    console.log(response);
  }
}, function(response) {
  $('#errorModal').modal();
});

这是我的文件' server.js'用我的快速配置:

var express = require('express');
var path = require('path');
var nodeMailer = require('nodemailer');
var bodyParser = require('body-parser');

var app = express();
var port = 3000;

app.use(express.static(path.join(__dirname, 'public')));

app.use(bodyParser.urlencoded({extended: false}));
app.use(bodyParser.json());

app.post('/formDevis', function(req, res) {
  const devis = req.body;
  res.send('it work');
});

好的,所以如果我这样做,我会得到回复并且我的表格已发布。 问题出在我的应用程序中的几个url。如果我直接在浏览器中输入,我无法访问我的网址。示例:如果我输入' my.com/users',则会给我一个错误。

我有一个文件' routes.js'用我的所有路线使用uiRouter。我想,可能是我必须用我的快速配置连接该文件?

我尝试添加:

app.use(function(req, res) {
  res.sendFile(__dirname + '/public/index.html');
});

然后,我的所有路线都有效,我可以直接在浏览器中访问它们。但另一方面,我的帖子请求不再起作用。 作为回应,它向我发送了我的index.html文件。

我尝试了几件事,但都没有奏效。我是新来表达的,很抱歉,如果我的问题是愚蠢的。可能是我错过了一些明显的东西 谢谢你的帮助

2 个答案:

答案 0 :(得分:0)

这将作为静态文件提供公共目录(没有声明虚拟根目录):

app.use(express.static(path.join(__dirname, 'public')));

因此,如果您有以下文件夹结构public/index.html,则可以访问此页面 - localhost:3000/index.html

public/css/styles.css也是如此,您可以像这样访问该文件 - localhost:3000/css/styles.css

现在这很好,但如果你想改变路线怎么办?

为静态文件定义虚拟根目录

app.use('/', function(req, res) {
  res.sendFile(__dirname + '/public/index.html');
});

app.use('/users', function(req, res) {
  res.sendFile(__dirname + '/public/users.html');
});

来源:Serving static files in express

答案 1 :(得分:0)

感谢您的帮助@ thomann061,但它对我不起作用。我认为我的问题一开始并不够清楚。

我有一个文件' routes.js'用我的所有路线使用uiRouter。对于我的应用程序中的一个视图,我有多个文件html(一个用于导航栏,几个用于主要内容,一个用于页脚...)。

 routing.config(($stateProvider, $urlRouterProvider, $locationProvider, $translateProvider) => {
  $locationProvider.html5Mode(true);
  $urlRouterProvider.otherwise('/');
  $stateProvider.state('home', {
    url: '/',
    views: {
      'nav@': {
        templateUrl: 'templates/nav.html',
        controller: 'NavController'
      },
      'content@': {
        templateUrl: 'templates/content/acceuil/acceuil.html',
        controller: 'TranslateController'
      },
      'clients@home': {
        templateUrl: 'templates/content/acceuil/clients.html',
        controller: 'ClientsController'
      },
      'top-footer@': {
        templateUrl: 'templates/footer/top-footer.html'
      },
      'footer@': {
        templateUrl: 'templates/footer/footer.html'
      }
    }
  }).state('devis', {
    url: '/devis',
    views: {
      'nav@': {
        templateUrl: 'templates/nav.html',
        controller: 'NavController'
      },
      'content@': {
        templateUrl: 'templates/content/devis/devis.html',
        controller: 'DevisController'
      },
      'cgv@devis': {
        templateUrl: 'templates/content/devis/cgv.html'
      },
      'success@devis': {
        templateUrl: 'templates/content/devis/success.html'
      },
      'error@devis': {
        templateUrl: 'templates/content/devis/error.html'
      },
      'top-footer@': {
        templateUrl: 'templates/footer/top-footer.html'
      },
      'footer@': {
        templateUrl: 'templates/footer/footer.html'
      }
    }
    });

然后,我在我的' server.js'中添加了这行代码:

app.use(express.static(path.join(__dirname, 'public')));

app.use(bodyParser.urlencoded({extended: false}));
app.use(bodyParser.json());

app.get('*', function(req, res) {
  res.sendFile(__dirname + '/public/index.html');
});

app.post('/formDevis', function(req, res) {
  const devis = req.body;
  res.send('it work');
});

像这样,它适用于我,我的所有路线和我的发布请求。