/api/short-links
로 들어오는 리퀘스트를 처리하려면 /pages/api/short-links.js
또는 /pages/api/short-links/index.js
경로로 파일을 만들고 함수를 default export하면 됨export default async function handler(req, res) {
...
}
res.status(201).send()
처럼 함수를 이어서 사용할 수 있음process.env
라는 객체를 통해서 참조할 수 있음.env
같은 이름의 파일에서 환경 변수들을 저장해 두면, Node.js 프로젝트를 실행할 때 환경 변수로 지정해 주는 라이브러리임.env
파일 같은 건 소스 코드에 포함시키면 안 된다는 것임.env.local
같은 파일을 추가하면 손쉽게 환경 변수를 추가할 수 있음// .env.local
MONGODB_URI=mongodb+srv://admin:blahblah@.clusterName.blahblah.mongodb.net/databaseName?retryWrites=true&w=majority
process.env.MONGODB_URI
로 참조할 수 있음export default function handler(req, res) {
const DB_URI = process.env.MONGODB_URI;
// 데이터베이스 접속 ...
}
NEXT_PUBLIC_
이라고 이름을 붙이면 이 환경 변수는 클라이언트 사이드에서도 사용할 수 있음NEXT_PUBLIC_HOST
라는 이름으로 사용하면 됨MONGODB_URI=mongodb+srv://admin:blahblah@cluster0.blahblah.mongodb.net/databaseName?retryWrites=true&w=majority
NEXT_PUBLIC_HOST=http://localhost:3000
export default Home() {
// 페이지 컴포넌트에서는 아래와 같이 사용
return (
<>호스트 주소: {process.env.NEXT_PUBLIC_HOST}</>
);
mongoose.connect()
함수를 사용해서 커넥션을 만들고 사용함mongoose.connection.readyState
라는 값을 확인하면 됨import mongoose from 'mongoose';
// ...
await dbConnect();
console.log(mongoose.connection.readyState);
mongoose.Schema()
를 사용해서 스키마를 생성함mongoose.model()
을 사용해서 모델을 생성함mongoose.models[ ... ]
로 참조할 수 있기 때문에 잘 지정했는지 반드시 확인해야 함ShortLink
라는 모델은 아래와 같이 만들 수 있는데 참고로 모듈 파일을 import할 때마다 모델을 생성하는 일이 일어나지 않도록 mongoose.models['ShortLink'] || mongoose.model('ShortLink',shortLinkSchema)
처럼 작성함import mongoose from 'mongoose';
const shortLinkSchema = new mongoose.Schema(
{
title: { type: String, default: '' },
url: { type: String, default: '' },
shortUrl: { type: String, default: '' },
},
{
timestamps: true,
}
);
const ShortLink =
mongoose.models['ShortLink'] || mongoose.model('ShortLink', shortLinkSchema);
export default ShortLink;
Model.create()
const newShortLink = await ShortLink.create({
title: '코드잇 커뮤니티',
url: 'https://www.codeit.kr/community/general',
});
Model.find()
const shortLinks = await ShortLink.find(); // 모든 도큐먼트 조회
const filteredShortLinks = await ShortLink.find({ shortUrl: 'c0d317' }) // shortUrl 값이 'c0d317'인 모든 도큐먼트 조회
Model.findById()
const shortLink = await ShortLink.findById('n3x7j5');
Model.findByIdAndUpdate()
const updatedShortLink = await ShortLink.findByIdAndUpdate('n3x7j5', { ... });
Model.findByIdAndDelete()
await ShortLink.findByIdAndDelete('n3x7j5');
아이디 값으로 조회하거나 업데이트하는 것 외에도 조건(MongoDB 문법)으로 사용하는 다양한 함수들이 있음
const shortLink = await ShortLink.findOne({ shortUrl: 'c0d317' });
await ShortLink.updateOne({ _id: 'n3x7j5' }, { ... }); // 업데이트만 하고 업데이트 된 값을 리턴하지는 않음
const updatedShortLink = await ShortLink.findOneAndUpdate({ _id: 'n3x7j5' }, { ... });
await ShortLink.deleteOne({ _id: 'n3x7j5' }, { ... }); // 삭제만 하고 기존 값을 리턴하지는 않음
const deletedShortLink = await ShortLink.findOneAndDelete({ _id: 'n3x7j5' }, { ... });