2

私はMEANスタックにかなり慣れていないので、フロントエンドでAngular JSによって処理され、バックエンドでExpressに渡されてNodemailerによって電子メールとして送信されるコンテンツフォームから値を送信しようとしています。

Angular から Express へのルーティングに問題があり、このスタックのドキュメントはかなりまばらなようです。また、ノードメーラーを使用して電子メールを送信すると想定しています。その情報やベストプラクティスも高く評価されます。

私のapp.js

var express = require('express');
var routes = require('./routes');

var user = require('./routes/user');
var contact = require('./routes/contact');  // Contact Form
var http = require('http');
var path = require('path');

var app = express();
var nodemailer = require("nodemailer");

// all environments
app.set('port', process.env.PORT || 3000);
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.json());
app.use(express.urlencoded());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));

// development only
if ('development' == app.get('env')) {
  app.use(express.errorHandler());
}

app.get('/', routes.index);
app.get('/users', user.list);
app.post('/contact', contact.process);  // Contact form route


http.createServer(app).listen(app.get('port'), function(){
  console.log('Express server listening on port ' + app.get('port'));
});

私のcontact.js

exports.post('/contact', function(req, res) {
console.log('I Made it to Express');
process(req, res);
});

私のAngularコントローラー

app.controller('contactController', function($scope, $http, $location) {
$scope.formData = {};

$scope.processForm = function() {
    console.log('Im in the controller');

    // Trigger validation flag.
    $scope.submitted = true;

    $http.post('/contact', {
        name: $scope.formData.name,
        email: $scope.formData.email,
        message: $scope.formData.message
    }).success(function(data, status, headers, config) {
            if(data.success){
                $location.path('/');
            }else {
                //do something about the error
            }
        });
};

});

そして最後に私のAngularアプリ

'use strict';
var app = angular.module('app', ['ngRoute']).config(function($routeProvider, $locationProvider) {


// Route: Default Widget View
$routeProvider.when('/contact', {
    controller: 'contactController'
});


});

私が見ているエラーは contact.js にあります - TypeError: Object # has no method 'post'

ここに私のフォルダ構造があります: ここに画像の説明を入力

4

2 に答える 2

2

前の回答は受け入れられますが、エラーの理由に対処したいと思います。

あなたcontact.jsは次のように見えるべきだった

function process(req, res) {
  //handle request here
}
exports.process = process;

エラーの理由は、 でメソッドが定義されcontact.jsていないことにあります。したがって、呼び出すことはできません。あなたが欲しいのは上記のコードです。postexports

于 2014-03-22T15:20:58.770 に答える
2

このようなものを調べることをお勧めします。Express 側で REST を実装した後、AngularJs 側でRestangularを使用して REST API を操作するのは非常に簡単です。

その移行の理由は非常に単純です。現在、コードの実装レベルが低すぎます。より高いレベルに移動すると、すでに Restangular にあるものを再実装することから逃れることができます。

于 2014-03-22T14:47:36.340 に答える