每个人。我正在制作我的第一个Node + Express + Angular应用程序。如何在不破坏NodeMailer的情况下在Express中启用HTML5模式?
我有点用https://github.com/codeschool/StayingSharpWithAngularSTB作为锅炉板。
总体布局是
[文件夹]应用
--------- [副文件夹]资产(Java脚本,CSS,图像等)
------ --- [子文件夹]页面(这包含ng-view的东西)
--------- [子文件夹]视图
-------------- ------ index.html(这是容纳所有东西的主要index.html)
[folder] node_modules
[文件夹]服务器
--------- [子文件夹]控制器
---------------------- core.server.controller。 JS
--------- expressConfig.js
--------- routes.js
app.js
的package.json
因此,这里是我的服务器配置文件:
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
而这里的一发送邮件的角度控制器
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当我删除磅和刷新,但没有我的接触形式的工作,并没有给我任何错误控制台...我的服务器文件是非常小的,它不是非常复杂,所以它应该很容易弄清楚如何同时使用HTML5模式和工作联系表单。有任何想法吗?我对Express并不了解,我使用教程http://www.bossable.com/1910/angularjs-nodemailer-contact-form/来了解如何使用nodemailer。有没有另外一种方法来设置nodemailer,这样可以工作?
我真的很感激一些帮助与此有关。这让我非常疯狂; __;
我想你需要app.get改变'( '/',''到app.get( '/ *',' – YOU
@YOU哦,我的上帝!感谢永远的。这工作!我不知道它为什么工作,但它做到了! – StephanieQ
因为在SPA中,你服务的一切index.html – YOU