如何在Node.js中使用Express创建HTTP服务器

本文概述

  • 需求
  • Express中HTTP服务器的结构
  • 你好, 世界
  • 处理路线和请求方法
  • 使用参数处理路线
  • 回应类型
  • HTTPS与Express
Express是一个最小且灵活的Node.js Web应用程序框架, 为Web和移动应用程序提供了一组强大的功能。
【如何在Node.js中使用Express创建HTTP服务器】在本文中, 你将学习如何使用Express和你需要了解的其他基础知识来创建http服务器。
需求 在项目中添加Express作为依赖项, 使用Node.js命令提示符中的以下命令添加Express:
npm install express

你可以使用– save参数将其执行, 以将其包含在package.json中(如果有)。现在, 你将可以在JavaScript文件中需要express模块??。
Express中HTTP服务器的结构
如何在Node.js中使用Express创建HTTP服务器

文章图片
  1. 中间件功能适用的HTTP方法。
  2. 中间件功能适用的路径(路由)。
  3. 中间件功能。
  4. 中间件函数的回调参数, 按照惯例称为” next” 。
  5. 中间件函数的HTTP响应参数, 按照惯例称为” res” 。
  6. 中间件函数的HTTP请求参数, 按照惯例称为” req” 。
你好, 世界 Express的理念是为HTTP服务器提供小型, 健壮的工具, 使其成为单页应用程序, 网站, 混合或公共HTTP API的理想解决方案。
要使用express创建第一个HTTP服务器, 请创建一个名称为server.js的js文件, 并在其上添加以下代码:
// Require express and create an instance of itvar express = require('express'); var app = express(); // on the request to root (localhost:3000/)app.get('/', function (req, res) {res.send('< b> My< /b> first express http server'); }); // On localhost:3000/welcomeapp.get('/welcome', function (req, res) {res.send('< b> Hello< /b> welcome to my http server made with express'); }); // Change the 404 message modifing the middlewareapp.use(function(req, res, next) {res.status(404).send("Sorry, that route doesn't exist. Have a nice day :)"); }); // start the server in the port 3000 !app.listen(3000, function () {console.log('Example app listening on port 3000.'); });

现在, 在Node.js命令提示符中使用以下命令保存内容并执行服务器:
node server.js

导航到先前在localhost(http:// localhost:3000或http:// localhost:3000 / welcome)的server.js文件中设置的端口3000, 并观察到魔术发生了。
处理路线和请求方法 对于预定义的路径, 你可以设置默认的请求方法, 甚至可以全部设置。路由可以是字符串, 模式或正则表达式。
var express = require('express'); var app = express(); app.get('/', function (req, res) {res.send('< b> My< /b> first express http server'); }); // 1) Add a route that answers to all request typesapp.route('/article').get(function(req, res) {res.send('Get the article'); }).post(function(req, res) {res.send('Add an article'); }).put(function(req, res) {res.send('Update the article'); }); // 2) Use a wildcard for a route// answers to : theANYman, thebatman, thesupermanapp.get('/the*man', function(req, res) {res.send('the*man'); }); // 3) Use regular expressions in routes// responds to : batmobile, batwing, batcave, batarangapp.get(/bat/, function(req, res) {res.send('/bat/'); }); app.use(function(req, res, next) {res.status(404).send("Sorry, that route doesn't exist. Have a nice day :)"); }); app.listen(3000, function () {console.log('Example app listening on port 3000.'); });

路由路径与请求方法结合, 定义了可以发出请求的端点。路由路径可以是字符串, 字符串模式或正则表达式。
使用参数处理路线 正如其他语言的已知服务器端框架的已知路由系统(例如Symfony)所做的那样, 允许你创建动态url, 该动态url期望url中的参数(而不是GET参数, 而是URL的一部分)返回动态内容, Express allow你可以使用url中的” / default-url /:parameter” 语法以相同的方式实现此目标。
var express = require('express'); var app = express(); app.get('/', function (req, res) {res.send('< b> My< /b> first express http server'); }); // route with parameters// matches to : /books/stephenking/category/horrorapp.get('/books/:user/category/:categorySlug', function(req, res) {console.log(req.params); var username = req.params.user; var category = req.paramas.categorySlug; res.send(req.params); }); app.use(function(req, res, next) {res.status(404).send("Sorry, that route doesn't exist. Have a nice day :)"); }); app.listen(3000, function () {console.log('Example app listening on port 3000.'); });

回应类型 在服务器端最常见的任务之间, 你需要向用户返回响应, Express有许多方法可以根据你的需要返回特定响应:
方法 描述
res.download() 提示要下载的文件。
重发() 结束响应过程。
res.json() 发送JSON响应。
res.jsonp() 发送带有JSONP支持的JSON响应。
res.redirect() 重定向请求。
res.render() 渲染视图模板。
res.send() 发送各种类型的响应。
res.sendFile() 将文件作为八位字节流发送。
res.sendStatus() 设置响应状态代码, 并将其字符串表示形式发送为响应正文。
应在每个” 控制器” 上使用响应对象发送响应:
app.get('/', function (req, res) {// JSON responseres.json({'myJson':'object'}); // Generate file downloadres.download('/path-to-file.txt'); // redirect to other urlres.redirect('/foo/bar'); res.redirect('http://example.com'); // Other response typesres.send(new Buffer('whoop')); res.send({ some: 'json' }); res.send('< p> some html< /p> '); res.status(404).send('Sorry, we cannot find that!'); res.status(500).send({ error: 'something blew up' }); });

HTTPS与Express 有时你需要访问浏览器的特殊功能, 这些功能仅在安全连接中可用, 因此需要为服务器提供SSL支持。
要使用Express实现它, 你需要访问node.js的https模块(默认情况下可用), 然后使用createServer方法创建服务器并提供.pem证书的路径(如果你想知道如何创建)。
var fs = require('fs'); var http = require('http'); var https = require('https'); var privateKey= fs.readFileSync('certificates/key.pem', 'utf8'); var certificate = fs.readFileSync('certificates/cert.pem', 'utf8'); var credentials = {key: privateKey, cert: certificate}; var express = require('express'); var app = express(); // your express configuration herevar httpServer = http.createServer(app); var httpsServer = https.createServer(credentials, app); // For httphttpServer.listen(8080); // For httpshttpsServer.listen(8443); app.get('/', function (req, res) {res.header('Content-type', 'text/html'); return res.end('< h1> Hello, Secure World!< /h1> '); });

通过这种方式, 你将使用Express导航到https:// localhost:8443以安全模式访问localhost。如果你想知道如何创建.pem必需文件以使服务器正常工作, 请阅读本文。
玩得开心 !

    推荐阅读