使用 Express 時的注意事項,還有一些地雷

真的要注意啦。

next 的呼叫時機

res.end 後不可以再呼叫 next(),因為 response 已經送出去了。

用 INSERT 指令會拿到的 result:

1
2
3
4
5
6
7
8
9
10
result: OkPacket {
fieldCount: 0,
affectedRows: 1,
insertId: 4,
serverStatus: 2,
warningCount: 0,
message: '',
protocol41: true,
changedRows: 0
}

資訊蠻多的,但最常用的應該會是 affectedRowsinsertId

ejs 有分 = 和 - 的差別

= 會自動做文字跳脫,- 不會。

1
2
<%= '<h1>safe</h1>' %>
<%- '<h1>unsafe</h1>' %>

關於 flash 和 session

請務必記得這個順序:

1
2
3
4
5
6
7
8
9
10
const flash = require('connect-flash');
const session = require('express-session');
// session 先
app.use(session({
secret: 'keyboard cat',
resave: false,
saveUninitialized: true,
}))
// 接著才可以用 flash
app.use(flash());

也不要為了測試而這樣寫:

1
2
3
4
5
6
7
8
9
handleLogin: (req, res, next) => {
const { username, password } = req.body;
if (!username || !password) {
req.flash('errorMessage', '請填滿所有欄位哦!');
// 這邊會把值覆寫掉,所以你怎麼讀都讀不到。
console.log(req.flash('errorMessage'));
return next();
}
}
使用 Sequelize 的事前準備 認識 Express 中的 Middleware
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×