nodejs 학습: Express 입문 및 기본
이 장에서는 nodejs: express 학습에 대한 소개와 기본 지식을 소개합니다. 그렇다면 Express란 무엇일까요? Express는 최소한의 기능을 갖춘 웹 개발 프레임워크이며 완전히 라우팅과 미들웨어로 구성되어 있습니다. 기본적으로 Express 애플리케이션은 다양한 미들웨어를 호출합니다. 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.
초기화
새 디렉토리 생성 myapp, 프로젝트 초기화
$ npm init
Express 설치
$ npm install express --save
Hello World 인스턴스 만들기
myapp 디렉토리에 들어가서 app이라는 파일을 만듭니다. .js
var express = require('express'); var app = express(); app.get('/', function(req, res) { res.send('Hello World!'); }); var server = app.listen(3000, function() { var host = server.address().address; var port = server.address().port; console.log('Example app listening at http://%s:%s', host, port); });
위 코드는 서비스를 시작하고 포트 3000에서 들어오는 모든 연결 요청을 수신합니다. 모든 (/) URL 또는 경로에 "Hello World!" 문자열을 반환합니다. 다른 모든 경로는 404 Not Found를 반환합니다.
다음 명령줄을 통해 시작합니다. 애플리케이션 빌더 도구 익스프레스는 애플리케이션 뼈대를 빠르게 생성할 수 있습니다.
1. 다음 명령을 설치합니다. $ node app.js
$ npm install express-generator -g
라우팅 정의는 app.METHOD(PATH, HANDLER) 구조로 구성됩니다. 그 중 app은 express 인스턴스이고, METHOD는 HTTP 요청 메서드 중 하나이고, PATH는 서버 측 경로이고, HANDLER는 경로가 일치할 때 실행되어야 하는 함수입니다.
다음은 몇 가지 일반적인 라우팅 코드입니다.
$ express myapp $ cd myapp $ npm install> set DEBUG=myapp & npm start
문자열 패턴을 사용한 라우팅 경로의 예: 문자 ?, +, * 및 ()는 정규 표현식의 하위 집합입니다. 및 .는 문자열 기반 경로에서 문자 그대로 해석됩니다.
├── app.js ├── bin │ └── www ├── package.json ├── public │ ├── images │ ├── javascripts │ └── stylesheets │ └── style.css ├── routes │ ├── index.js │ └── users.js └── views ├── error.jade ├── index.jade └── layout.jade 7 directories, 9 files
라우팅 핸들미들웨어처럼 동작하는 요청 처리를 위한 여러 콜백 기능을 제공할 수 있습니다. 유일한 차이점은 이러한 콜백 함수가 next('route') 메서드를 호출하고 다른 경로 콜백 함수를 건너뛸 수 있다는 것입니다.
Route 핸들은 다양한 형태로 제공되며 아래와 같이 함수, 함수 배열 또는 두 가지의 혼합일 수 있습니다.
var express = require('express'); var app = express(); // respond with "hello world" when a GET request is made to the homepage app.get('/', function(req, res) { res.send('hello world'); }); // POST method route app.post('/', function (req, res) { res.send('POST request to the homepage'); }); //app.all() 是一个特殊的路由方法,没有任何 HTTP 方法与其对应,它的作用是对于一个路径上的所有请求加载中间件。 app.all('/secret', function (req, res, next) { console.log('Accessing the secret section ...'); next(); // pass control to the next handler });
방법 설명: res.download()는 파일을 다운로드하라는 메시지를 표시합니다. res.end()는 응답 처리 프로세스를 종료합니다. res.JSON()은 JSON 형식으로 응답을 보냅니다.
res.jsonp()는 JSONP를 지원하는 JSON 형식으로 응답을 보냅니다.res.redirect()는 요청을 리디렉션합니다.
res.render()는 뷰 템플릿을 렌더링합니다.res.send()는 다양한 유형의 응답을 보냅니다.
res.sendFile은 파일을 옥텟 스트림으로 보냅니다.res.sendStatus()는 응답 상태 코드를 설정하고 이를 응답 본문의 일부로 문자열로 보냅니다. app.route()
app.route()를 사용하여 체인을 만들 수 있습니다. 라우팅 경로 라우팅 핸들. 경로가 한 곳에서 지정되므로 이렇게 하면 모듈식 라우팅을 생성하는 데 도움이 되고 코드 중복과 오타가 줄어듭니다.
// 匹配 acd 和 abcd app.get('/ab?cd', function(req, res) { res.send('ab?cd'); }); // 匹配 abcd、abbcd、abbbcd等 app.get('/ab+cd', function(req, res) { res.send('ab+cd'); }); // 匹配 abcd、abxcd、abRABDOMcd、ab123cd等 app.get('/ab*cd', function(req, res) { res.send('ab*cd'); }); // 匹配 /abe 和 /abcde app.get('/ab(cd)?e', function(req, res) { res.send('ab(cd)?e'); }); //使用正则表达式的路由路径示例: // 匹配任何路径中含有 a 的路径: app.get(/a/, function(req, res) { res.send('/a/'); }); // 匹配 butterfly、dragonfly,不匹配 butterflyman、dragonfly man等 app.get(/.*fly$/, function(req, res) { res.send('/.*fly$/'); });
express.Router
express.Router 클래스를 사용하여 모듈식 마운트 가능한 경로를 만들 수 있습니다. 핸들. 라우터 인스턴스는 완전한 미들웨어이자 라우팅 시스템이므로 종종 "미니 앱"이라고도 합니다.
앱 디렉토리에 다음 내용을 포함하는birds.js라는 파일을 생성합니다:
//使用多个回调函数处理路由(记得指定 next 对象): app.get('/example/b', function (req, res, next) { console.log('response will be sent by the next function ...'); next(); }, function (req, res) { res.send('Hello from B!'); }); //使用回调函数数组处理路由: var cb0 = function (req, res, next) { console.log('CB0'); next(); } var cb1 = function (req, res, next) { console.log('CB1'); next(); } var cb2 = function (req, res) { res.send('Hello from C!'); } app.get('/example/c', [cb0, cb1, cb2]);
app.route('/book') .get(function(req, res) { res.send('Get a random book'); }) .post(function(req, res) { res.send('Add a book'); }) .put(function(req, res) { res.send('Update the book'); });
Express를 사용하여 정적 파일 호스팅
Express에 내장된 Express를 통해 정적 파일을 쉽게 호스팅할 수 있습니다. .static (이미지, CSS, JavaScript 파일 등) 정적 리소스 파일에 대한 액세스를 제공하기 위해 정적 리소스 파일이 있는 디렉터리를 매개변수로 express.static 미들웨어에 전달합니다. 예를 들어 이미지, CSS 및 JavaScript 파일을 공용 디렉토리에 저장한다고 가정하면 다음을 수행할 수 있습니다.
var express = require('express'); var router = express.Router(); // 该路由使用的中间件 router.use( function timeLog(req, res, next) { console.log('Time: ', Date.now()); next(); }); // 定义网站主页的路由 router.get('/', function(req, res) { res.send('Birds home page'); }); // 定义 about 页面的路由 router.get('/about', function(req, res) { res.send('About birds'); }); module.exports = router;
이제 공용 디렉토리 아래의 파일에 액세스할 수 있습니다.
var birds = require('./birds'); ... app.use('/birds', birds);
정적 리소스가 여러 디렉터리에 저장되어 있는 경우 express.static 미들웨어를 여러 번 호출할 수 있습니다.
app.use(express.static('public')); app.use(express.static('files'));
如果你希望所有通过 express.static 访问的文件都存放在一个“虚拟(virtual)”目录(即目录根本不存在)下面,可以通过为静态资源目录指定一个挂载路径的方式来实现,如下所示:
app.use('/static', express.static('public'));
现在,你就爱可以通过带有 “/static” 前缀的地址来访问 public 目录下面的文件了。
http://localhost:3000/static/images/kitten.jpg http://localhost:3000/static/css/style.css http://localhost:3000/static/js/app.js http://localhost:3000/static/images/bg.png http://localhost:3000/static/hello.html
常见问题
如何处理 404 ?
在 Express 中,404 并不是一个错误(error)。因此,错误处理器中间件并不捕获 404。这是因为 404 只是意味着某些功能没有实现。也就是说,Express 执行了所有中间件、路由之后还是没有获取到任何输出。你所需要做的就是在其所有他中间件的后面添加一个处理 404 的中间件。如下:
app.use(function(req, res, next) { res.status(404).send('Sorry cant find that!'); });
Express 支持哪些模板引擎?
Express 支持任何符合 (path, locals, callback) 接口规范的模板引擎。
如何渲染纯 HTML 文件?
不需要!无需通过 res.render() 渲染 HTML。你可以通过 res.sendFile() 直接对外输出 HTML 文件。如果你需要对外提供的资源文件很多,可以使用 express.static() 中间件。
위 내용은 nodejs 학습: Express 입문 및 기본의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Node.js는 고성능, 확장성, 크로스 플랫폼 지원, 풍부한 생태계, 개발 용이성 등의 기능을 제공하므로 백엔드 프레임워크로 사용할 수 있습니다.

MySQL 데이터베이스에 연결하려면 다음 단계를 따라야 합니다. mysql2 드라이버를 설치합니다. mysql2.createConnection()을 사용하여 호스트 주소, 포트, 사용자 이름, 비밀번호 및 데이터베이스 이름이 포함된 연결 개체를 만듭니다. 쿼리를 수행하려면 Connection.query()를 사용하세요. 마지막으로 Connection.end()를 사용하여 연결을 종료합니다.

Node.js에는 다음과 같은 전역 변수가 존재합니다. 전역 개체: 전역 핵심 모듈: 프로세스, 콘솔, 필수 런타임 환경 변수: __dirname, __filename, __line, __column 상수: undefine, null, NaN, Infinity, -Infinity

Node.js 설치 디렉터리에는 npm과 npm.cmd라는 두 가지 npm 관련 파일이 있습니다. 차이점은 다음과 같습니다. 확장자가 다릅니다. npm은 실행 파일이고 npm.cmd는 명령 창 바로 가기입니다. Windows 사용자: npm.cmd는 명령 프롬프트에서 사용할 수 있으며, npm은 명령줄에서만 실행할 수 있습니다. 호환성: npm.cmd는 Windows 시스템에만 해당되며 npm은 크로스 플랫폼에서 사용할 수 있습니다. 사용 권장사항: Windows 사용자는 npm.cmd를 사용하고, 기타 운영 체제는 npm을 사용합니다.

Node.js와 Java의 주요 차이점은 디자인과 기능입니다. 이벤트 중심 대 스레드 중심: Node.js는 이벤트 중심이고 Java는 스레드 중심입니다. 단일 스레드 대 다중 스레드: Node.js는 단일 스레드 이벤트 루프를 사용하고 Java는 다중 스레드 아키텍처를 사용합니다. 런타임 환경: Node.js는 V8 JavaScript 엔진에서 실행되는 반면 Java는 JVM에서 실행됩니다. 구문: Node.js는 JavaScript 구문을 사용하고 Java는 Java 구문을 사용합니다. 목적: Node.js는 I/O 집약적인 작업에 적합한 반면, Java는 대규모 엔터프라이즈 애플리케이션에 적합합니다.

예, Node.js는 백엔드 개발 언어입니다. 서버 측 비즈니스 로직 처리, 데이터베이스 연결 관리, API 제공 등 백엔드 개발에 사용됩니다.

Node.js와 Java는 각각 웹 개발에 장단점이 있으며 선택은 프로젝트 요구 사항에 따라 다릅니다. Node.js는 실시간 애플리케이션, 신속한 개발 및 마이크로서비스 아키텍처에 탁월한 반면, Java는 엔터프라이즈급 지원, 성능 및 보안에 탁월합니다.

예, Node.js는 프런트엔드 개발에 사용될 수 있으며 주요 장점은 고성능, 풍부한 생태계, 플랫폼 간 호환성입니다. 고려해야 할 사항은 학습 곡선, 도구 지원 및 소규모 커뮤니티 규모입니다.
