如何在Express中启用HTML5模式而不破坏NodeMailer?

大家。 我正在制作我的第一个Node + Express + Angular应用程序。

我有点用https://github.com/codeschool/StayingSharpWithAngularSTB作为锅炉板。

总体布局是

[文件夹]应用程序
——— [子文件夹]资产(Javascript,CSS,图像等)
——— [子文件夹]页面(这包含ng视图的东西)
——— [子文件夹]视图
——————– index.html(这是主要的index.html,它把所有东西放在一起)

[文件夹] node_modules
[文件夹]服务器
——— [子文件夹]控制器
———————- core.server.controller.js
——— expressConfig.js
——— routes.js
app.js
的package.json

所以这里是我的服务器configuration文件:
app.js

var app = require("./server/routes"); // Start the server var port = process.env.PORT || 8000; app.listen(port, function(){ console.log('Listening on port ' + port); }); 

/server/expressConfig.js

 var bodyParser = require('body-parser'); module.exports = function(app, express) { // Serve static assets from the app folder. This enables things like javascript // and stylesheets to be loaded as expected. You would normally use something like // nginx for this, but this makes for a simpler demo app to just let express do it. app.use("/", express.static("app/")); // Set the view directory, this enables us to use the .render method inside routes app.set('views', __dirname + '/../app/views'); // parse application/x-www-form-urlencoded app.use(bodyParser.urlencoded({ extended: false })); // parse application/json app.use(bodyParser.json()); }; 

/server/routes.js

 var express = require('express'); var app = express(); var core = require('./controllers/core.server.controller') // Load Express Configuration require('./expressConfig')(app, express); // Root route app.get('/', function(req, res){ res.sendfile('index.html', {root: app.settings.views}); }); // routes for sending forms app.route('/contact-form').post(core.sendMail); app.route('/table-form').post(core.sendTableRes); app.route('/artist-form').post(core.sendArtistRes); module.exports = app; 

/server/controllers/core.server.controller.js

 var nodemailer = require('nodemailer'); var transporter = nodemailer.createTransport({ service: 'gmail', auth: { user: //my gmail, pass: //my gmail password } }); // Send an email when the volunteer form is submitted exports.sendMail = function (req, res){ var data = req.body; transporter.sendMail({ from: //my gmail, to: //another gmail, subject: data.volunteerName+ ' wants to volunteer for our event 2016', text: 'Volunteer Info \n Name : '+data.volunteerName+'\n Phone Number : ' +data.volunteerNum+'\n E-mail : ' +data.volunteerEmail }); res.json(data); }; // Other similar mailing functions 

这里是发送邮件的angular度控制器之一
volunteerFormController.js

 angular.module('MyApp').controller('FormController', function($http){ this.volunteer = { }; this.addVolunteer = function(){ var data = ({ volunteerName : this.volunteer.name, volunteerEmail : this.volunteer.email, volunteerNum : this.volunteer.phone }); $http.post('/contact-form', data). then(function(response) { //show thank you message with animate.css classes and hide form $(".thanksFriend").addClass("animated tada showBlock"); $("form").addClass("flipOutX animated hideBlock"); }, function(response) { $(".sorryFriend").addClass("animated tada showBlock"); }); }; }); 

这工作得很好! 但是,如果我在Angular中启用html5模式,并在Express中使用索引

 app.use(function(req, res){ res.sendfile('index.html', {root: app.settings.views}); }); 

在routes.js文件中,Html 5模式很好用! 没有404s,当我删除磅和刷新,但没有我的联系forms的工作,并没有给我任何错误的控制台…我的服务器文件是非常小,它不是非常复杂的,所以它应该是很容易弄清楚如何同时使用HTML5模式和工作联系表单。 有任何想法吗? 我对Express不太了解,我用一个教程http://www.bossable.com/1910/angularjs-nodemailer-contact-form/来弄清楚如何使用nodemailer。 有没有其他的方法来设置nodemailer,所以这个工作?

我真的很感谢这个帮助。 这让我非常疯狂; __;

所以,你必须为每个请求返回index.html,

通过改变app.get('/',app.get('/*',