>웹 프론트엔드 >JS 튜토리얼 >Express.js의 주요 실수와 해결 방법

Express.js의 주요 실수와 해결 방법

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-27 18:40:14263검색

Top Express.js Mistakes and How to Fix Them

Express.js는 Node.js에서 웹 애플리케이션을 구축하는 데 널리 사용되는 프레임워크이지만 숙련된 개발자라도 디버그하기 까다로울 수 있는 오류에 직면합니다. 이 가이드에서는 가장 일반적인 Express.js 오류 중 일부를 다루고, 오류가 발생하는 이유를 설명하며, 애플리케이션을 다시 정상으로 되돌릴 수 있는 실질적인 수정 사항을 제공합니다.

1. 오류: 헤더를 보낸 후에는 헤더를 설정할 수 없습니다.

이 오류는 일반적으로 동일한 요청에 대해 여러 응답을 보내려고 할 때 발생합니다. 예를 들어, 경로 핸들러에서 실수로 res.send() 또는 res.json()을 두 번 이상 호출할 수 있습니다.

예:

app.get('/example', (req, res) => {
    res.send('First response');
    res.send('Second response'); // This will throw the error.
});

수정:
요청당 하나의 응답만 보내도록 하세요. 응답을 보낸 후 추가 실행을 방지하려면 조건부 논리 또는 반환 문을 사용하세요.

app.get('/example', (req, res) => {
    if (!req.query.param) {
        return res.status(400).send('Bad Request');
    }
    res.send('Valid Request');
});

2. 오류: 미들웨어가 실행되지 않음

미들웨어가 제대로 연결되지 않았거나 그 안에서 next()가 호출되지 않은 경우에 발생합니다. 미들웨어 기능은 명시적으로 다음 미들웨어나 경로 핸들러에 제어권을 전달해야 합니다.

예:

app.use((req, res) => {
    console.log('Middleware executed');
    // Forgot to call next()
});
app.get('/test', (req, res) => {
    res.send('Hello, World!');
});

수정:
미들웨어가 응답을 종료하지 않는 한 next()를 호출하세요.

app.use((req, res, next) => {
    console.log('Middleware executed');
    next(); // Pass control to the next middleware or route
});

3. 오류: req.body 정의되지 않음

req.body가 정의되지 않은 경우 express.json() 또는 express.urlencoded()와 같은 본문 구문 분석 미들웨어를 사용하는 것을 잊었기 때문일 가능성이 높습니다.

예:

app.post('/submit', (req, res) => {
    console.log(req.body); // undefined
});

수정:

앱 초기화에 본문 구문 분석 미들웨어를 포함하세요.

app.use(express.json());
app.use(express.urlencoded({ extended: true }));

app.post('/submit', (req, res) => {
    console.log(req.body); // Now it works
    res.send('Data received');
});

4. 오류: 경로를 찾을 수 없음(404)

이 오류는 수신 요청과 일치하는 경로가 없을 때 발생합니다. 기본적으로 Express는 404 핸들러를 제공하지 않습니다.

수정:

404 오류를 처리하려면 경로 정의 끝에 포괄적인 미들웨어를 추가하세요.

app.use((req, res) => {
    res.status(404).send('Page Not Found');
});

5. 오류: EADDRINUSE(사용 중인 포트)

이는 앱이 바인딩하려는 포트를 이미 다른 프로세스에서 사용하고 있는 경우에 발생합니다.

Error: listen EADDRINUSE: address already in use :::3000

수정:
충돌하는 프로세스를 찾아서 종료하거나 다른 포트를 사용하십시오. 프로그래밍 방식으로 오류를 처리할 수도 있습니다.

const port = process.env.PORT || 3000;

app.listen(port, () => {
    console.log(`Server running on port ${port}`);
}).on('error', (err) => {
    if (err.code === 'EADDRINUSE') {
        console.error(`Port ${port} is already in use. Please use a different port.`);
    }
});

Express.js 오류는 실망스러울 수 있지만 근본 원인을 이해하면 문제를 더 쉽게 해결할 수 있습니다. 이러한 일반적인 수정 사항을 사용하면 애플리케이션을 디버그하고 프로젝트를 원활하게 실행할 수 있는 능력이 향상됩니다.

이 가이드가 도움이 되었다면 ❤️ 아이콘을 누르고 저를 팔로우하여 더 많은 JavaScript 팁과 요령을 확인하세요!

위 내용은 Express.js의 주요 실수와 해결 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.