【问题标题】:How to enable HTML5 mode in Express without breaking NodeMailer?如何在 Express 中启用 HTML5 模式而不破坏 NodeMailer?
【发布时间】:2015-09-19 04:42:29
【问题描述】:

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

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

总体布局是

[文件夹] 应用程序
--------- [子文件夹] 资产(Javascript、css、图像等)
--------- [子文件夹] 页面(这包含 ng-view 的东西)
--------- [子文件夹] 浏览量
-------------------- index.html(这是将所有内容结合在一起的主要 index.html)

[文件夹] node_modules
[文件夹] 服务器
--------- [子文件夹] 控制器
---------------------- core.server.controller.js
--------- expressConfig.js
--------- routes.js
应用程序.js
包.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

这是发送邮件的角度控制器之一
志愿者FormController.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 模式效果很好!当我删除磅并刷新时没有 404,但是我的联系表格都不起作用,控制台也没有给我任何错误……我的服务器文件很小,也不是很复杂,所以应该很容易弄清楚如何同时拥有 HTML5 模式和工作联系表单。有任何想法吗?我对 Express 了解不多,我使用了一个教程 http://www.bossable.com/1910/angularjs-nodemailer-contact-form/ 来了解如何使用 nodemailer。是否有另一种方法来设置 nodemailer 以使其有效?

我真的很感激这方面的帮助。这让我快疯了;__;

【问题讨论】:

  • 我觉得你需要把app.get('/',改成app.get('/*',
  • @YOU 天哪!感谢永远。那行得通!我不知道为什么它起作用了,但它确实起作用了!
  • 因为在 SPA 中,您提供一切 index.html

标签: angularjs node.js express nodemailer


【解决方案1】:

因此,您必须为每个请求返回 index.html,

通过将app.get('/', 更改为app.get('/*',

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-01
    • 2016-06-10
    • 1970-01-01
    相关资源
    最近更新 更多