실제로 db에 저장되는 속성은 아니지만 기존의 존재하는 속성값들의 연산을 통해 만든 새로운 속성을 마치 db에 존재하는것처럼 사용할 수 있는 기능
const userSchema = mongoose.Schema({
firstName: String,
lastName: String
});
// Create a virtual property `fullName` with a getter and setter.
userSchema.virtual('fullName').
get(function() { return `${this.firstName} ${this.lastName}`; }).
set(function(v) {
// `v` is the value being set, so use the value to set
// `firstName` and `lastName`.
const firstName = v.substring(0, v.indexOf(' '));
const lastName = v.substring(v.indexOf(' ') + 1);
this.set({ firstName, lastName });
});
const User = mongoose.model('User', userSchema);
const doc = new User();
// Vanilla JavaScript assignment triggers the setter
doc.fullName = 'Jean-Luc Picard';
doc.fullName; // 'Jean-Luc Picard'
doc.firstName; // 'Jean-Luc'
doc.lastName; // 'Picard'
https://mongoosejs.com/docs/tutorials/virtuals.html
...
ArticleSchema.pre(
"deleteOne", { document: false, query: true },
async function (next) {
// post id
const { _id } = this.getFilter();
// 관련 댓글 삭제
await Comment.deleteMany({ articleId: _id });
next();
}
);
...
let answer = Array.from({length:5}, ()=>1);
console.log(answer); // 결과 : [1, 1, 1, 1, 1]
answer = Array.from({length:5}, (v, i)=> i);
console.log(answer); // 결과 : [0, 1, 2, 3, 4]
let answer = Array.(5).fill(0);
console.log(answer); // 결과 : [1, 1, 1, 1, 1]
function create2DArray(rows, columns) {
var arr = new Array(rows);
for (var i = 0; i < rows; i++) {
arr[i] = new Array(columns);
}
return arr;
}
function makeArray() {
for (let i = 0; i < 21; i++) {
vi.push([]);
for (let j = 0; j < 21; j++) {
vi[i].push([]);
for (let k = 0; k < 21; k++) {
vi[i][j].push(null);
}
}
}
}
let keyname = 'Name';
let something = {
[keyname + 'postfix'] : 'value'
};
let keyname = 'Name';
let something = { };
something[keyname + 'postfix'] = 'value';
app.use(express.urlencoded({ extended: false }));
app.use(express.json());
form-urlencoded
라는 규격의 body 데이터를 파싱해서 서버 코드에서 쉽게 사용할 수 있게 해주는 미들웨어JSON
규격의 body 데이터를 파싱해서 서버 코드에서 사용할 수 있게 도와주는 미들웨어app.use((req, res, next) => {
// 필요한 코드
});
어떤 HTTP Status Code로 응답 할지, 어떤 데이터 형식으로 응답 할지, 헤더는 어떤 값을 넣어 응답 할지 다양한 기능을 제공
mdn 참고:
https://expressjs.com/ko/guide/writing-middleware.html
CORS preflight
라고 부른다.// app.js
const express = require("express");
const app = express();
const port = 3000;
app.get("/cors-test", (req, res) => {
res.send('hi');
});
app.listen(port, () => {
console.log("서버가 켜졌어요!");
});
https://test-cors.org 에서 remote server의 url을 localhost로 요청하면 cors 에러발생 (네트워크 탭 확인)
해결하려면?=> 서버에 Access-Control-Allow-Origin 응답 헤더를 추가
=> cors 모듈 사용해 간단히 해결 가능
//내 서버로 오는 모든 요청 허용
const express = require("express");
const cors = require("cors");
const app = express();
const port = 3000;
app.use(cors());
app.get("/cors-test", (req, res) => {
res.send("hi");
});
app.listen(port, () => {
console.log("서버가 켜졌어요!");
});