web -> localhost
하지만 앱을 개발할 때는 ios simulator, android emulator를 돌리기 때문에, web의 localhost로 할 때는 연결이 되지 않는다.
따라서, ios와 android 에뮬레이터의 IP 주소를 따로 설정해주어야 한다.
ios -> 127.0.0.1
andriod -> 10.0.2.2
(만약 안 된다면 settings.py에서 ALLOWED_HOST[*]로 바꿔주면 된다)
나는 ios simulator로 개발했기 때문에 ios 기준으로 얘기하겠다.
일단 API 연결 전에, 백엔드에서 Response Body를 지정해주었다.
{
"success" : true,
"result" : [~],
"status" : 200
}
axios를 매번 import하는 것보다는 api 파일을 따로 만들었다.
import axios from 'axios';
const API = axios.create({
baseURL: 'http://127.0.0.1:8000/api',
headers: {
'Content-Type' : 'application/json',
},
});
export default API;
Create
const saveNote = async () => {
const data = {
user_id: userId,
title: title,
date: new Date(),
contents: contents,
category_id: categoryId,
}
try {
const response = await API.post(
`/notes`,
data
)
.then(function (response) {
if (response.data['success'] == true) {
navigation.navigate('Note', {
noteId: response.data.result['note_id'],
categoryName: category,
userId: userId,
fromUpload: true
})
}
})
.catch(function (error) {
console.log(error.response);
});
} catch (error) {
console.log(error);
}
}
Read
const getNotes = async () => {
try {
await API.get(
`/notes/${noteId}`
)
.then(function (response) {
if (response.data['success'] == true) {
setTitle(response.data.result['title']);
setContents(response.data.result['contents']);
setSummary(response.data.result['summary']);
for(let i = 0; i < response.data.result.keywords.length; i++){
_keyword.push(response.data.result.keywords[i]['keyword']);
}
setKeywords(keywords.concat(_keyword));
}
})
.catch(function (error) {
console.log(error.response);
})
} catch (error) {
console.log(error);
}
}
Update
const modifyNote = async () => {
const data = {
user_id: userId,
title: title,
contents: contents,
date: new Date(),
category_id: categoryId + 1,
}
try {
const response = await API.put(
`/notes/${noteId}`,
data
)
.then(function (response) {
if (response.data['success'] == true) {
navigation.replace('Note', {
noteId: response.data.result['note_id'],
categoryName: category,
userId: userId,
fromUpload: fromUpload
});
}
})
.catch(function (error) {
console.log(error.response);
});
} catch (error) {
console.log(error);
}
}
Delete
const deleteNote = async () => {
try {
await API.delete(
`/notes/${noteId}`
)
.then(response => {
if(response.status === 204){
console.log('delete');
fromUpload ? (
navigation.replace('Camera')
) : (
navigation.replace('List', {
categoryName: categoryName,
userId: userId
})
)
}
})
.catch(function (error) {
console.log(error);
});
} catch (error) {
console.error(error);
}
}