个性化阅读
专注于IT技术分析

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

本文概述

Express是一个最小且灵活的Node.js Web应用程序框架, 为Web和移动应用程序提供了一组强大的功能。

在本文中, 你将学习如何使用Express和你需要了解的其他基础知识来创建http服务器。

需求

在项目中添加Express作为依赖项, 使用Node.js命令提示符中的以下命令添加Express:

npm install express

你可以使用–save参数将其执行, 以将其包含在package.json中(如果有)。现在, 你将可以在JavaScript文件中需要express模块​​。

Express中HTTP服务器的结构

Express.js中间件
  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 it
var 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/welcome
app.get('/welcome', function (req, res) {
    res.send('<b>Hello</b> welcome to my http server made with express');
});

// Change the 404 message modifing the middleware
app.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 types
app.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, thesuperman
app.get('/the*man', function(req, res) {
    res.send('the*man');
});

// 3) Use regular expressions in routes
// responds to : batmobile, batwing, batcave, batarang
app.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/horror
app.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 response
    res.json({
        'myJson':'object'
    });

    // Generate file download
    res.download('/path-to-file.txt');

    // redirect to other url
    res.redirect('/foo/bar');
    res.redirect('http://example.com');

    // Other response types
    res.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 here

var httpServer = http.createServer(app);
var httpsServer = https.createServer(credentials, app);

// For http
httpServer.listen(8080);
// For https
httpsServer.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必需文件以使服务器正常工作, 请阅读本文。

玩得开心 !

赞(0)
未经允许不得转载:srcmini » 如何在Node.js中使用Express创建HTTP服务器

评论 抢沙发

评论前必须登录!