节点如何从表单中捕获数据?

How does node capture data from a form?

ejs 文件中的相关行:

<form action="/foo" method="post">

app.js 文件:

var express = require('express')
var bodyParser = require('body-parser')

// I'm having trouble understanding this line
app.post('/foo', urlencodedParser, function (req, res) {

  res.send('welcome, ' + req.body.username)
})

当我们点击ejs文件中的提交按钮时,数据被附加到"/foo请求对象。

是否app.js因为调用了这个函数function(req, res)而获得了请求对象?不知何故,我觉得我们正在提出新的要求。

还有第一个参数的用途是什么?也就是说,"app.post('/foo' "?

/*
 * POST request (when server receive a request from the client, normally used for 
 * inserting data into the storage system
 */

// app.post('foo', ...) is an endpoint whenever a server receives a request having '/foo' in the last e.g. http://localhost:3000/foo, the below function do some tasks

app.post('/foo', urlencodedParser, function (req, res) { // Route handler having /foo in the end of the URL
  res.send('welcome, ' + req.body.username)
})

这是你的 app.js 侦听端口 3000

var express = require('express')
var app = express();
var bodyParser = require('body-parser')

app.post('/foo', urlencodedParser, function (req, res) {

  res.send('welcome, ' + req.body.username)
});

 //starting server
 app.listen('3000',function(){
 console.log("App started on port 3000.");
 });

此处您将 ​​express 的实例存储在 express 变量中,它将具有所有 express 功能。 现在我们通过调用它的构造函数来开始 express,下面一行就是这样做的。

var app = express();

下面,我们正在创建 body-parser 的实例,它可以帮助我们读取节点应用程序中的请求正文。

var bodyParser = require('body-parser')

现在我们在我们的应用中使用 body-parser 是这样的:

app.use(bodyParser.json())

在上一行中,我们正在解析 json 格式的请求正文,以便我们可以访问 json 格式的请求正文。

现在应用程序变量将监听某个端口,例如 3000,之后当用户提交表单时,例如这个表单:

<form action="/foo" method="post">

对于上面的表单,当用户提交时,在后台我们已经启动了我们的节点应用程序,它将通过 'post' 方法侦听 '/foo' 路由,所以当 '/foo' 路由with method post 被命中,它会进入它的函数体并且 运行 它:

app.post('/foo', urlencodedParser, function (req, res) {
        res.send('welcome, ' + req.body.username)
}

在上面的函数中,我们将用户名与消息连接起来发送回响应,'username' 我们从请求正文中获得。

可以通过以下步骤实现此目的

  1. 创建一个 express 模块的对象 var app = express();
  2. 创建一个 body-parser 实例,它可以帮助我们在我们的节点应用程序中读取请求主体。 var parser = require('body-parser')
  3. 在我们的应用程序中使用解析器 app.use(bodyParser.json()); 在这里您将获得 json 格式的请求正文
  4. 当用户提交表单时,我们在后台 运行ning 的节点应用程序使用 post 方法侦听 '/foo' 路由。 所以当使用方法 post 的 '/foo' 路由被命中时,它将转到它的函数体和 运行 它。

  5. 此函数正在发送带有用户名的响应(我们从请求正文中获得)和一条消息。

接下来是:-- [app.post('/foo' "] 的目的是什么 当用户提交表单时,我们在后台 运行ning 的节点应用程序使用 post 方法侦听 '/foo' 路由(服务器收到具有 /foo 的请求)。 所以当使用方法 post 的 '/foo' 路由被命中时,它将转到它的函数体和 运行 它。