本文概述
Express是一个最小且灵活的Node.js Web应用程序框架, 为Web和移动应用程序提供了一组强大的功能。
在本文中, 你将学习如何使用Express和你需要了解的其他基础知识来创建http服务器。
需求
在项目中添加Express作为依赖项, 使用Node.js命令提示符中的以下命令添加Express:
npm install express
你可以使用–save参数将其执行, 以将其包含在package.json中(如果有)。现在, 你将可以在JavaScript文件中需要express模块。
Express中HTTP服务器的结构
- 中间件功能适用的HTTP方法。
- 中间件功能适用的路径(路由)。
- 中间件功能。
- 中间件函数的回调参数, 按照惯例称为” next”。
- 中间件函数的HTTP响应参数, 按照惯例称为” res”。
- 中间件函数的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必需文件以使服务器正常工作, 请阅读本文。
玩得开心 !
评论前必须登录!
注册