Ajax(Asynchronous JavaScript and XML, 에이잭스)는 비동기적인 웹 애플리케이션의 제작을 위해 아래와 같은 조합을 이용하는 웹 개발 기법이다.
- 표현 정보를 위한 HTML (또는 XHTML) 과 CSS
- 동적인 화면 출력 및 표시 정보와의 상호작용을 위한 DOM, 자바스크립트
- 웹 서버와 비동기적으로 데이터를 교환하고 조작하기 위한 XML, XSLT, XMLHttpRequest (Ajax 애플리케이션은 XML/XSLT 대신 미리 정의된 HTML이나 일반 텍스트, JSON, JSON-RPC를 이용할 수 있다).
- 위키백과 -
youtube
*|app.js
*|routes.js
|routers
+|apiRouter.js
|controllers
*|videoController.js
const API = '/api';
const REGISTER_VIEW = '/:id/view';
const routes = {
api: API,
rgisterView: REGISTER_VIEW,
};
export default routes;
export const postRgisterView = async(req, res) => {
const {params:{id}} = req;
try{
const video = await Video.findById(id);
video.views += 1;
video.save();
//정상
res.status(200);
}catch(){
//에러
res.status(400);
}finally{
res.end();
}
}
import express from 'express';
import routes from './routes';
import {postRegisterView} from '../controllers/videoController';
const apiRouter = express.Router();
apiRouter.post(routes.registerView, postRegisterView);
import apiRouter from './routers/apiRouter';
app.use(routes.api, apiRotuer);
fetch는 url에 get method로 요청을 보냅니다. 눈에 보이진 않지만 url에 접속하는거죠. 브라우저 콘솔에서 fetch('http://localhost:4000/api/:id/view', {method:'POST'})
를 작성하고나서 새로고침후에 view를 확인하면 view가 1 늘어나있을 겁니다.
youtube
|assets
|js
*|videoPlayer.js
const registerView = () => {
const videoId = window.location.href.split("/videos/")[1];
fetch(`/api/${videoId}/view`,{
method: "POST"
});
}
function init(){
videoPlayer.addEventListener("ended", registerView);
}