📅  最后修改于: 2020-11-03 10:11:12             🧑  作者: Mango
Express是一个最小而灵活的Node.js Web应用程序框架,它提供了一组强大的功能来开发Web和移动应用程序。它促进了基于节点的Web应用程序的快速开发。以下是Express框架的一些核心功能-
允许设置中间件以响应HTTP请求。
定义一个路由表,该路由表用于根据HTTP方法和URL执行不同的操作。
允许基于将参数传递给模板来动态呈现HTML页面。
首先,使用NPM在全球范围内安装Express框架,以便可以使用它通过节点终端创建Web应用程序。
$ npm install express --save
上面的命令将安装本地保存在node_modules目录中,并在node_modules内部创建一个Express目录。您应该安装以下重要模块以及express-
body-parser-这是一个用于处理JSON,Raw,Text和URL编码的表单数据的node.js中间件。
cookie- parser-解析Cookie标头,并用由cookie名称作为键的对象填充req.cookies。
multer-这是用于处理多部分/表单数据的node.js中间件。
$ npm install body-parser --save
$ npm install cookie-parser --save
$ npm install multer --save
以下是一个非常基本的Express应用程序,该应用程序启动服务器并在端口8081上监听连接。这个程序回应你好世界!用于请求首页。对于其他所有路径,它将以404 Not Found响应。
var express = require('express');
var app = express();
app.get('/', function (req, res) {
res.send('Hello World');
})
var server = app.listen(8081, function () {
var host = server.address().address
var port = server.address().port
console.log("Example app listening at http://%s:%s", host, port)
})
将上面的代码保存在名为server.js的文件中,并使用以下命令运行它。
$ node server.js
您将看到以下输出-
Example app listening at http://0.0.0.0:8081
在任何浏览器中打开http://127.0.0.1:8081/以查看以下结果。
Express应用程序使用回调函数,其参数为请求和响应对象。
app.get('/', function (req, res) {
// --
})
您可以打印req和res对象,这些对象提供了许多与HTTP请求和响应有关的信息,包括cookie,会话,URL等。
我们已经看到了为主页提供HTTP请求的基本应用程序。路由是指确定应用程序如何响应客户端对特定端点的请求,该特定端点是URI(或路径)和特定的HTTP请求方法(GET,POST等)。
我们将扩展Hello World程序,以处理更多类型的HTTP请求。
var express = require('express');
var app = express();
// This responds with "Hello World" on the homepage
app.get('/', function (req, res) {
console.log("Got a GET request for the homepage");
res.send('Hello GET');
})
// This responds a POST request for the homepage
app.post('/', function (req, res) {
console.log("Got a POST request for the homepage");
res.send('Hello POST');
})
// This responds a DELETE request for the /del_user page.
app.delete('/del_user', function (req, res) {
console.log("Got a DELETE request for /del_user");
res.send('Hello DELETE');
})
// This responds a GET request for the /list_user page.
app.get('/list_user', function (req, res) {
console.log("Got a GET request for /list_user");
res.send('Page Listing');
})
// This responds a GET request for abcd, abxcd, ab123cd, and so on
app.get('/ab*cd', function(req, res) {
console.log("Got a GET request for /ab*cd");
res.send('Page Pattern Match');
})
var server = app.listen(8081, function () {
var host = server.address().address
var port = server.address().port
console.log("Example app listening at http://%s:%s", host, port)
})
将上面的代码保存在名为server.js的文件中,并使用以下命令运行它。
$ node server.js
您将看到以下输出-
Example app listening at http://0.0.0.0:8081
现在,您可以在http://127.0.0.1:8081尝试不同的请求,以查看server.js生成的输出。以下是一些截屏,它们显示了不同URL的不同响应。
屏幕再次显示http://127.0.0.1:8081/list_user
屏幕再次显示http://127.0.0.1:8081/abcd
屏幕再次显示http://127.0.0.1:8081/abcdefg
Express提供了内置的中间件express.static来提供静态文件,例如图像,CSS,JavaScript等。
您只需要将保存静态资产的目录的名称传递给express.static中间件即可开始直接提供文件。例如,如果将图像,CSS和JavaScript文件保存在名为public的目录中,则可以执行以下操作-
app.use(express.static('public'));
我们将在public / images子目录中保留一些图像,如下所示-
node_modules
server.js
public/
public/images
public/images/logo.png
让我们修改“ Hello Word”应用程序以添加处理静态文件的功能。
var express = require('express');
var app = express();
app.use(express.static('public'));
app.get('/', function (req, res) {
res.send('Hello World');
})
var server = app.listen(8081, function () {
var host = server.address().address
var port = server.address().port
console.log("Example app listening at http://%s:%s", host, port)
})
将上面的代码保存在名为server.js的文件中,并使用以下命令运行它。
$ node server.js
现在,在任何浏览器中打开http://127.0.0.1:8081/images/logo.png,并观察以下结果。
这是一个简单的示例,该示例使用HTML FORM GET方法传递两个值。我们将在server.js中使用process_get路由器来处理此输入。
让我们将上面的代码保存在index.htm中,并修改server.js以处理主页请求以及HTML表单发送的输入。
var express = require('express');
var app = express();
app.use(express.static('public'));
app.get('/index.htm', function (req, res) {
res.sendFile( __dirname + "/" + "index.htm" );
})
app.get('/process_get', function (req, res) {
// Prepare output in JSON format
response = {
first_name:req.query.first_name,
last_name:req.query.last_name
};
console.log(response);
res.end(JSON.stringify(response));
})
var server = app.listen(8081, function () {
var host = server.address().address
var port = server.address().port
console.log("Example app listening at http://%s:%s", host, port)
})
使用http://127.0.0.1:8081/index.htm访问HTML文档将生成以下形式-
现在您可以输入名字和姓氏,然后单击提交按钮以查看结果,它应该返回以下结果:
{"first_name":"John","last_name":"Paul"}
这是一个简单的示例,该示例使用HTML FORM POST方法传递两个值。我们将在server.js中使用process_get路由器来处理此输入。
让我们将上面的代码保存在index.htm中,并修改server.js以处理主页请求以及HTML表单发送的输入。
var express = require('express');
var app = express();
var bodyParser = require('body-parser');
// Create application/x-www-form-urlencoded parser
var urlencodedParser = bodyParser.urlencoded({ extended: false })
app.use(express.static('public'));
app.get('/index.htm', function (req, res) {
res.sendFile( __dirname + "/" + "index.htm" );
})
app.post('/process_post', urlencodedParser, function (req, res) {
// Prepare output in JSON format
response = {
first_name:req.body.first_name,
last_name:req.body.last_name
};
console.log(response);
res.end(JSON.stringify(response));
})
var server = app.listen(8081, function () {
var host = server.address().address
var port = server.address().port
console.log("Example app listening at http://%s:%s", host, port)
})
使用http://127.0.0.1:8081/index.htm访问HTML文档将生成以下形式-
现在,您可以输入名字和姓氏,然后单击提交按钮以查看以下结果:
{"first_name":"John","last_name":"Paul"}
以下HTML代码创建一个文件上传器表单。此表单的方法属性设置为POST,而enctype属性设置为multipart / form-data
File Uploading Form
File Upload:
Select a file to upload:
让我们将上面的代码保存在index.htm中,并修改server.js以处理主页请求以及文件上传。
var express = require('express');
var app = express();
var fs = require("fs");
var bodyParser = require('body-parser');
var multer = require('multer');
app.use(express.static('public'));
app.use(bodyParser.urlencoded({ extended: false }));
app.use(multer({ dest: '/tmp/'}));
app.get('/index.htm', function (req, res) {
res.sendFile( __dirname + "/" + "index.htm" );
})
app.post('/file_upload', function (req, res) {
console.log(req.files.file.name);
console.log(req.files.file.path);
console.log(req.files.file.type);
var file = __dirname + "/" + req.files.file.name;
fs.readFile( req.files.file.path, function (err, data) {
fs.writeFile(file, data, function (err) {
if( err ) {
console.log( err );
} else {
response = {
message:'File uploaded successfully',
filename:req.files.file.name
};
}
console.log( response );
res.end( JSON.stringify( response ) );
});
});
})
var server = app.listen(8081, function () {
var host = server.address().address
var port = server.address().port
console.log("Example app listening at http://%s:%s", host, port)
})
使用http://127.0.0.1:8081/index.htm访问HTML文档将生成以下形式-
File Upload:
Select a file to upload:
NOTE: This is just dummy form and would not work, but it must work at your server.
您可以使用以下中间件选项将cookie发送到可以处理该cookie的Node.js服务器。以下是一个简单示例,用于打印客户端发送的所有cookie。
var express = require('express')
var cookieParser = require('cookie-parser')
var app = express()
app.use(cookieParser())
app.get('/', function(req, res) {
console.log("Cookies: ", req.cookies)
})
app.listen(8081)