1. Sequelize Data type
https://sequelize.org/master/manual/model-basics.html#data-types
sequelize에는 여러 옵션이 있는데, 그 중 data type옵션을 알아보았다.
테이블에 flag설정을 위해 boolean형식의 data type을 찾는 중, 하는 김에 다 가져와봤다(Others에 딸린 링크에 더 있긴 하지만).
Strings
DataTypes.STRING // VARCHAR(255)
DataTypes.STRING(1234) // VARCHAR(1234)
DataTypes.STRING.BINARY // VARCHAR BINARY
DataTypes.TEXT // TEXT
DataTypes.TEXT('tiny') // TINYTEXT
DataTypes.CITEXT // CITEXT PostgreSQL and SQLite only.
Boolean
DataTypes.BOOLEAN // TINYINT(1)
Numbers
DataTypes.INTEGER // INTEGER
DataTypes.BIGINT // BIGINT
DataTypes.BIGINT(11) // BIGINT(11)
DataTypes.FLOAT // FLOAT
DataTypes.FLOAT(11) // FLOAT(11)
DataTypes.FLOAT(11, 10) // FLOAT(11,10)
DataTypes.REAL // REAL PostgreSQL only.
DataTypes.REAL(11) // REAL(11) PostgreSQL only.
DataTypes.REAL(11, 12) // REAL(11,12) PostgreSQL only.
DataTypes.DOUBLE // DOUBLE
DataTypes.DOUBLE(11) // DOUBLE(11)
DataTypes.DOUBLE(11, 10) // DOUBLE(11,10)
DataTypes.DECIMAL // DECIMAL
DataTypes.DECIMAL(10, 2) // DECIMAL(10,2)
Unsigned & Zerofill integers - MySQL/MariaDB only
In MySQL and MariaDB, the data types INTEGER, BIGINT, FLOAT and DOUBLE can be set as unsigned or zerofill (or both), as follows:
DataTypes.INTEGER.UNSIGNED
DataTypes.INTEGER.ZEROFILL
DataTypes.INTEGER.UNSIGNED.ZEROFILL
// You can also specify the size i.e. INTEGER(10) instead of simply INTEGER
// Same for BIGINT, FLOAT and DOUBLE
Dates
DataTypes.DATE // DATETIME for mysql / sqlite, TIMESTAMP WITH TIME ZONE for postgres
DataTypes.DATE(6) // DATETIME(6) for mysql 5.6.4+. Fractional seconds support with up to 6 digits of precision
DataTypes.DATEONLY // DATE without time
UUIDs
For UUIDs, use DataTypes.UUID. It becomes the UUID data type for PostgreSQL and SQLite, and CHAR(36) for MySQL. Sequelize can generate UUIDs automatically for these fields, simply use Sequelize.UUIDV1 or Sequelize.UUIDV4 as the default value:
{
type: DataTypes.UUID,
defaultValue: Sequelize.UUIDV4 // Or Sequelize.UUIDV1
}
Others
There are other data types, covered in a separate guide.
2. jwt.verify
https://github.com/auth0/node-jsonwebtoken#jwtverifytoken-secretorpublickey-options-callback
jwt.verify를 쓸 경우 토큰 만료 시 token 에러명이 TokenExpiredError인 에러가 발생한다.
해당 상황 발생 시 서버 터미널에 에러메세지가 줄줄 나오는게 싫어서 열심히 찾아본 후 jwt.verify의 callback용법 사용으로 해결했다(이 방법이 맞는건지는 잘 모르겠다).
아래는 verify TokenExpiredError에 대한 응답을 보여주는 코드이다. 원래는 더 긴 코드인데 token expired error처리 부분만 적당히 잘라왔다.
참고로 아래의 post는 /user/logout의 post요청을 express로 처리한다.
post: (req, res) => {
const token = req.cookies.token;
if (!token) {
//? token이 존재하지 않음
return res.status(400).json(`token isn't exist`);
}
let tokenErr = false;
const decoded = jwt.verify(token, process.env.SECRET_KEY, (err, decoded) => {
if (err) {
// console.log(err.name);
tokenErr = true;
switch (err.name) {
case 'TokenExpiredError':
//? token이 만료됨.
return res.status(401).json('token is already expired');
default:
//? token decoded 에러
return res.status(400).json(`invalid token. error name: ${err.name}`);
}
}
return decoded;
});
if (tokenErr) {
//! token decoded error
return;
}
}

만료된 토큰을 가지고 /user/logout의 post요청을 보낼 경우 원하던대로 "token is already expired"응답이 온다.
'TIL > DevLog' 카테고리의 다른 글
| 3ideas 회고 (0) | 2020.03.17 |
|---|---|
| 200120(월) Devlog. Sequelize.Op를 이용한 DB검색 (0) | 2020.01.28 |
| 200117(금) Devlog. Sequelize model delete, attributes, include | project office hour (0) | 2020.01.17 |
| 200116(목) Devlog. Sequelize create,field,update | HTTP 상태관리 코드 | sprint office hour (0) | 2020.01.16 |
| 200114(화) Devlog. Express request, mysql 사용자 추가 (0) | 2020.01.14 |