如果在看的過程中有任何錯誤歡迎寫 E-MAIL: pp840405@gmail.com 提醒我錯誤。
dotenv - 環境變數設定
這篇使用 No.1 文章的文件載點, dotenv 需要安裝這套件,但文件的 package 已經有資訊了, 到時候需要使用 .env 的環境變數這環境變數在 node.js 上已經有內建了。
在 contact.js 上面開起套件新增一個套件
1
2
3
4
5
6
7var express = require('express');
var router = express.Router();
var csrf = require('csurf');
var csrfProtection = csrf({ cookie: true });
var nodeemailer = require('nodemailer');
//新增 dotenv
require('dotenv').config();在根目錄也就是 email_init 資料夾下面新增一個 .env 檔案,沒有檔名只有副檔名,依照下面這樣寫入
1
2gmailUser = 自己的Email
gmailPass = 自己的Email密碼在 contact.js 修改一段成下列程式碼
1
2
3
4
5
6
7
8
9
10router.post('/post', csrfProtection, function(req, res) {
var transport = nodeemailer.createTransport({
service:'Gmail',
//寄件者是誰
auth:{
//因為這個資料是機密所以不被他人看到所以抓取.env的內容
user: process.env.gmailUser,
pass: process.env.gmailPass
}
});像 .env 檔案並不會上傳到 github 之類的網站,這些網站都會有一個類似 env 的機制, HEROKU 就有一個機制可以保密機密資料。
connect-flash - 資料暫存設計
如何比對使用者填寫表單資料格式是否正確,一樣 如果沒有有安裝請先安裝,這邊提供 package 檔案裡有 connect-flash 資訊了。
請先開啟 app.js 檔案並且開啟2個套件且加入一些程式碼,沒有寫上去的資料都不用去動。
1
2
3
4
5
6
7
8
9var flash = require('connect-flash');
var session = require('express-session');
//
app.use(session({
secret: 'mysuoercat',
resave: true,
saveUninitialized: true
}));
app.use(flash());開啟 contact.js 新增,新增的內容都寫在註解下面
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38router.get('/', csrfProtection, function(req, res) {
res.render('contact',{
csrfToken: req.csrfToken() ,
//設定一個名為 errors 的資料,下面會設定處發後你鍊帶入什麼資訊
errors: req.flash('errors')
});
});
router.get('/review', function(req, res) {
res.render('contactReview');
});
router.post('/post', csrfProtection, function(req, res) {
//下判斷
if(req.body.username == ''){
//如果 username 欄位空值那就會跑出一個 errors 的變數並帶入資料
req.flash('errors','姓名不能為空');
//之後並轉址到 /contact
return res.redirect('/contact');
};
var transport = nodeemailer.createTransport({
service:'Gmail',
auth:{
user:process.env.gmailUser,
pass:process.env.gmailPass
}
});
var mailoptions = {
form:'"我是帥哥"<liuconing@gmail.com>',
to : 'pp840405@gmail.com',
subject: req.body.username + '寄了一封信',
text: req.body.description
};
transport.sendMail(mailoptions,function(error,info){
if(error){
return console.log(error);
}
res.redirect('review');
});
});判斷有下好之後網頁並不會顯示 errors 裡面得資料,所以也要到 contact.ejs 去新增。
1
2
3
4
5
6<h1>聯絡我們</h1>
<%= errors %>
<div>
<label for="username">姓 名:</label>
<input type="text" name="username" id="username"/>
</div>
這套件是建立一個暫存資料的區域,只會占用極小部分記憶體一旦網頁再度重新整理這段資料就會消失,除非在觸發它的程式才會再度啟動。
結語
基本上 node.js 的一些基礎就到這邊,如果有學到其他東西我會視情況在這分享,有任何問題歡迎寫 MAIL: pp840405@gmail.com 一起共同討論。