프레임워크를 사용하지 않고 NodeJS API를 만드는 방법

프레임워크를 사용하지 않고 NodeJS API를 만드는 방법

Node.js는 브라우저 외부에서 JavaScript 코드를 실행할 수 있게 해주는 chrome의 v8 엔진에 구축된 오픈 소스 JavaScript 런타임입니다.





이벤트 모델, 생태계 및 속도 덕분에 Node.js는 서버 측 애플리케이션에서 가장 많이 사용되는 런타임 중 하나가 되었습니다.





대부분의 Node.js API 서버는 Express 또는 다른 프레임워크를 사용합니다. 그러나 몇 단계만 거치면 프레임워크 없이 간단한 Node.js API를 만들 수도 있습니다.





MAKEUSEOF 오늘의 비디오

1단계: 개발 환경 설정

프로젝트 디렉토리를 생성하고 CD 다음을 실행하여 입력하십시오.

mkdir nodejs-api 
cd nodejs-api

다음으로 초기화 npm 다음을 실행하여 프로젝트에서



이메일 앱에서 동기화 끄기
npm init -y 

이 CRUD API는 NoSQL 데이터베이스인 MongoDB와 인기 있는 ODM인 mongoose를 사용합니다.

다음 명령을 실행하여 설치 몽구스 :





npm install mongoose 

다음으로 생성 서버.js 프로젝트의 루트 디렉터리에 파일을 만들고 아래 코드 블록을 추가하여 서버를 만듭니다.

const http = require("http"); 
const server = http.createServer((req, res) => {});

server.listen(3000, () => {
console.log(`Server is running`);
});

이 코드 블록은 핵심 Node.js 모듈인 http 모듈을 가져옵니다. http 모듈을 사용하면 Node.js가 HTTP를 통해 데이터를 전송할 수 있습니다. 이 모듈에는 서버를 만드는 데 필요한 메서드가 포함되어 있습니다.





다음으로 http 모듈의 생성 서버 서버의 인스턴스를 생성하고 반환하는 메소드. 그만큼 생성 서버 메소드는 요청 및 응답 객체를 매개변수로 사용하는 콜백 함수를 사용합니다.

다음으로 코드는 듣다 반환된 서버 인스턴스의 메서드입니다. 이렇게 하면 서버가 지정된 포트에서 트래픽 수신을 시작할 수 있습니다. 그만큼 듣다 메서드는 성공하면 두 번째 인수인 콜백을 시작합니다.

마지막으로 다음과 같은 두 개의 디렉토리를 만듭니다. 노선 그리고 모델 프로젝트의 루트 디렉토리에 있습니다. 그만큼 노선 폴더에는 API에 대한 라우팅 논리가 포함되지만 모델 데이터베이스와 관련된 모든 것이 포함됩니다.

2단계: 애플리케이션을 데이터베이스에 연결

~ 안에 서버.js , 수입 몽구스 :

const mongoose = require("mongoose"); 

를 불러 연결하다 방법 몽구스 MongoDB URI를 인수로 전달하십시오.

mongoose.connect("MongoDB_URI") 

3단계: API 모델 생성

간단한 블로그 애플리케이션을 위한 CRUD API를 만듭니다. 당신의 모델 폴더, 생성 블로그모델.js 파일에 다음 코드를 추가합니다.

const mongoose = require("mongoose"); 
const blogSchema = mongoose.Schema({
title: {
type: String,
required: [true, "Blog must have a title"],
},
body: {
type: String,
required: [true, "Blog must have a body"],
},
});
module.exports = mongoose.model("Blog", blogSchema);

위의 코드 블록은 두 가지 속성이 있는 mongoose 모델을 만들고 이를 MongoDB 데이터베이스에 매핑합니다.

이 모델의 두 속성은 모두 와 함께 입력 필수의 로 설정 진실 . 요청 본문에 속성 중 하나가 포함되어 있지 않으면 수반되는 오류 메시지가 표시됩니다.

마지막 줄은 다음을 호출하여 몽구스 모델을 만들고 내보냅니다. 모델 방법 몽구스. 모델명( 블로그 ) 첫 번째 인수 및 스키마( 블로그스케줄 ) 두 번째 인수로.

4단계: 애플리케이션에서 라우팅 구현

의 도움 없이 Express와 같은 프레임워크 , API에 대한 각 요청을 처리하는 로직을 수동으로 생성해야 합니다.

먼저, 생성 블로그 경로.js 당신의 파일 노선 폴더로 이동한 다음 블로그 모델을 가져옵니다.

const Blog = require("../models/blogModel"); 

다음으로 비동기식 생성 라우터 기능, 통과 요구 그리고 입술 매개변수로 함수를 내보냅니다.

const router = async function (req, res) {}; 
module.exports = router;

이 기능에는 모든 라우팅 논리가 포함됩니다.

다음으로 경로별로 라우팅 논리 경로를 구현합니다.

GET 경로

아래 코드 블록을 귀하의 라우터 구현하는 기능 가져 오기 요청에 대한 경로 처리기 /api/블로그 :

//  GET: /api/blogs 
if (req.url === "/api/blogs" && req.method === "GET") {
// get all blogs
const blogs = await Blog.find();

// set the status code and content-type
res.writeHead(200, { "Content-Type": "application/json" });

// send data
res.end(JSON.stringify(blogs));
}

위의 코드 블록은 다음을 확인합니다. URL 그리고 방법 요청 객체의 속성 그런 다음 데이터베이스에서 모든 블로그를 가져옵니다. 찾기 몽구스 모델의 메서드( 블로그 ).

마이크로소프트 오피스 2010 대 2013 비교 차트

다음으로 호출합니다. 쓰기 머리 방법 입술 , 응답 객체. 이 메서드는 상태 코드, 선택적 상태 메시지 및 헤더의 세 가지 인수가 제공된 응답 헤더를 보냅니다. 그만큼 200 상태 코드는 성공적인 응답을 나타내며 이 API 호출의 콘텐츠 유형은 다음으로 설정됩니다. 애플리케이션/json .

마지막으로 다음을 호출하여 서버가 중단되지 않도록 요청을 닫습니다. 방법 입술 . 전화 JSON.stringify 변환 블로그 객체를 JSON 문자열로 전달하고 메서드는 이를 응답 본문으로 반환합니다.

아래 코드 블록을 라우터 구현하는 기능 가져 오기 단일 리소스에 대한 경로 처리기:

// GET: /api/blogs/:id 
if (req.url.match(/\/api\/blogs\/([0-9]+)/) && req.method === "GET") {
try {
// extract id from url
const id = req.url.split("/")[3];

// get blog from DB
const blog = await Blog.findById(id);

if (blog) {
res.writeHead(200, { "Content-Type": "application/json" });
res.end(JSON.stringify(blog));
} else {
throw new Error("Blog does not exist");
}
} catch (error) {
res.writeHead(404, { "Content-Type": "application/json" });
res.end(JSON.stringify({ message: error }));
}
}

이 코드는 성냥 url이 형식과 일치하는지 확인하기 위해 regex 표현식을 인수로 사용하는 메소드: /api/blogs/<숫자> .

다음으로 추출 ID 재산 URL 문자열을 호출하여 나뉘다 방법. 이 메서드는 패턴을 인수( / ), 패턴에 따라 문자열을 분할하고 배열을 반환합니다. 해당 배열의 세 번째 요소는 ID .

마지막으로 일치하는 문서를 검색합니다. ID 당신의 데이터베이스에서. 존재하는 경우 전송 응답 코드 200 , 요청을 닫고 검색된 블로그를 보냅니다. 존재하지 않으면 오류를 발생시키고 catch 블록에 응답으로 보냅니다.

POST 경로

라우터 기능에 아래 코드 블록을 추가하여 게시하다 경로 처리기:

// POST: /api/blogs/ 
if (req.url === "/api/blogs" && req.method === "POST") {
try {
let body = "";

// Listen for data event
req.on("data", (chunk) => {
body += chunk.toString();
});

// Listen for end event
req.on("end", async () => {
// Create Blog
let blog = new Blog(JSON.parse(body));

// Save to DB
await blog.save();
res.writeHead(200, { "Content-Type": "application/json" });
res.end(JSON.stringify(blog));
});
} catch (error) {
console.log(error);
}
}

요청 객체는 Node.js 읽기 가능한 스트림 상호 작용. 이 스트림은 데이터 그리고 요청 본문의 데이터에 액세스할 수 있는 이벤트입니다.

이 코드는 데이터 이벤트를 수신 대기하고 문자열로 변환하고 연결하여 처리합니다. 신체 변하기 쉬운. 에서 이벤트 핸들러, 그것은 생성 블로그 구문 분석된 본문 문자열이 있는 인스턴스. 그런 다음 새 블로그를 저장하고 상태 코드와 콘텐츠 헤더를 보내고 요청을 닫습니다.

PUT 경로

라우터 기능에 아래 코드 블록을 추가하여 놓다 경로 처리기:

// PUT: /api/blogs/:id 
if (req.url.match(/\/api\/blogs\/([0-9]+)/) && req.method === "PUT") {
try {
// extract id from url
const id = req.url.split("/")[3];
let body = "";

req.on("data", (chunk) => {
body += chunk.toString();
});
req.on("end", async () => {
// Find and update document
let updatedBlog = await Blog.findByIdAndUpdate(id, JSON.parse(body), {
new: true,
});

res.writeHead(200, { "Content-Type": "application/json" });
res.end(JSON.stringify(updatedBlog));
});
} catch (error) {
console.log(error);
}
}

PUT 요청 핸들러는 게시하다 요청 처리기를 추출하는 것을 제외하고 ID 재산 URL 관련 블로그를 업데이트합니다.

경로 삭제

라우터 기능에 아래 코드 블록을 추가하여 삭제 경로 처리기:

// DELETE: /api/blogs/:id 
if (req.url.match(/\/api\/blogs\/([0-9]+)/) && req.method === "DELETE") {
try {
const id = req.url.split("/")[3];

// Delete blog from DB
await Blog.findByIdAndDelete(id);
res.writeHead(200, { "Content-Type": "application/json" });
res.end(JSON.stringify({ message: "Blog deleted successfully" }));
} catch (error) {
res.writeHead(404, { "Content-Type": "application/json" });
res.end(JSON.stringify({ message: error }));
}
}

이 코드 블록은 ID ~로부터 URL , 일치하는 문서를 삭제합니다. ID , 상태 코드와 헤더를 보내고 요청을 닫습니다.

Unity는 어떤 프로그래밍 언어를 사용합니까?

마지막으로 수입 라우터 당신의 서버.js 파일을 작성하고 전화하십시오. 라우터 함수, 전달 요구 그리고 입술 인수로:

const router = require("./routes/blogRoutes"); 

const server = http.createServer((req, res) => {
router(req, res);
});

이렇게 하면 서버가 요청을 적절하게 가로채고 처리할 수 있습니다.

여기에서 완료된 프로젝트를 찾을 수 있습니다. GitHub 저장소 .

Node.js 프레임워크 사용

Web API를 손으로 만드는 것은 가능하지만 어려운 작업이 될 수 있습니다. 많은 극단적인 경우를 다루었고 코드에 버그가 없는 것이 더 나은지 확인해야 합니다.

수년에 걸쳐 개발자는 ExpressJS, NestJS, Fastify 등과 같은 프레임워크를 구축하여 훨씬 쉽게 만들었습니다.