2017-06-24 21 views
2

私は仕事しています角度4ユニバーサル、私はnodemailerを使用してお問い合わせフォームの電子メールを送信しようとしています。私はhttp.postAngular 4 Universalでhttp投稿リクエストを作成するには?

contact.template.html

<form (ngSubmit)="onSubmit()"> 
     <input type="text" name="fullname" (keyup)="validate()" [class.requireds]="isNameInvalid" placeholder="Full Name" required [(ngModel)]="contactObj.userName" /> 
     <input type="text" name="email" (keyup)="validate()" [class.requireds]="isEmailInvalid" placeholder="Email" required [(ngModel)]="contactObj.userEmail"/> 
    </form> 

contact.component.ts

contactObj = { 
userName: "", 
userEmail: "", 
}; 


onSubmit() { 
    if (this.isNameInvalid || this.isEmailInvalid) { 
    return; 
    } else { 

    let params = JSON.stringify(this.contactObj); 
    let headers = new Headers({"Content-Type": "application/json"}); 
    let options = new RequestOptions({headers: headers}); 
    this.http.post("/api/send", params, options).subscribe(res => { 
    }); 
    } 
} 

サーバを介してデータをポストすることはできませんよ。 ts

import 'zone.js/dist/zone-node'; 
import 'reflect-metadata'; 
import 'rxjs/Rx'; 
import * as express from 'express'; 
import * as compression from 'compression'; 
import { platformServer, renderModuleFactory } from '@angular/platform-server'; 
import { ServerAppModule } from './app/server-app.module'; 
import { ngExpressEngine } from './modules/ng-express-engine/express-engine'; 
import { ROUTES } from './routes'; 


const app = express(); 
const port = Number(process.env.PORT || 8080); 

app.engine('html', ngExpressEngine({ 
    bootstrap: ServerAppModule 
})); 

app.set('view engine', 'html'); 
app.set('views', 'src'); 

app.post("/api/send", sendMailApi); 

app.use(compression()); 
app.use('',express.static('dist'));  
app.use('/assets',express.static('dist/assets')); 

app.use('/static',express.static('dist/static', { 
    index: false 
})); 

app.listen(port,() => { 
    console.log(`Listening at ${port}`); 
}); 

api.ts api.ts

// For send Mail 
export function sendMailApi(req, res) { 
console.log(req.body.userName); //returns undefined 

let mailTo = { 

from: '"Contact Us" <[email protected]>', 
to: "[email protected]", 
subject: "Foo- Reach out to us", 
html: "Message Body:<p>my message goes here</p>", 
replyTo: req.body.userEmail 
}; 

let smtpTransport = nodemailer.createTransport({ 
host: "smtp.gmail.com", 
port: 465, 
secure: true, 
auth: { 
    user: "[email protected]", 
    pass: "[email protected]" 
} 
}); 

smtpTransport.sendMail(mailTo, function (error, info) { 
    if (error) { 
    console.log("Error sending mail: %s", error); 
    } else { 

    console.log("Message sent: " + info.messageId, info.response); 
    //res.message = response.message; 
    } 
}); 

} 

私は未定義としてすべての値を受け付けております。 私のコードで何が間違っていますか?

ありがとうございます。

+0

あなたが '' 'server.ts'''ファイルの多くのコードを提供してもらえますか?特に '' 'app.use()' 'のエントリです。 –

+1

@MaciejSobalaこんにちは、私は 'server.ts'ファイルを更新しました、ありがとうございます。 –

+0

答えはあなたのために機能しますか? –

答えて

2

サーバーサイドコードにbodyParserがありません。 は、次の操作を実行します。あなたのserver.tsで

npm install body-parser --save

import * as bodyParser from 'body-parser'; 
import * as express from 'express'; 

const app = express(); 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: true })); 

/* 
other code 
*/ 
+0

ありがとうございました。これを解決するために数日間苦労してきました。 –

+0

それは素晴らしいです。だから今あなたはこの答えを受け入れて投票することができます:) –

+1

私はそれをする前にすべきことの一つ、 'app.use(bodyParser.json()); 'server.ts'ファイルの' app.post( "/ api/send"、sendMailApi);の前に呼び出さなければなりません。私のために。答えを更新してください。この小さな詳細は、私のような新しい人のために多くの時間を節約することができます。 –

関連する問題