如何使 req.body.password 不等于 undefined?

How do I make req.body.password not equal to undefined?

在我的 html 我有,

<input name="password" type="password" required class="form-control" id="exampleInputPassword1">

在我的节点中,

const express = require('express');
const bodyParser = require('body-parser');
const app = express();
const urlencodedParser = bodyParser.urlencoded({ extended: false })


app.get('/login.html', (req, res) => {
    res.sendFile('./login.html', {root: __dirname});
})

app.post('/login', urlencodedParser, (req,res)=>{
    req.body.password
})  

但是,req.body.password 未定义或为空。我如何让它真正抓住用户输入的内容?它对它们中的任何一个都不起作用,但我只是以密码为例。所有包都已正确下载。

谢谢。

我使用了以下代码:

const express = require("express");
const bcrypt = require("bcrypt");
const bodyParser = require("body-parser");

const app = express();
const jsonParser = express.json();

const urlencodedParser = bodyParser.urlencoded({ extended: false });

// CHANGE THIS TO DATABASE LATER OF USERS
const users = [];

//listen for requests

app.listen(3000);

app.use(express.static(__dirname + "/public"));

app.get("/index.html", (req, res) => {
  res.sendFile("./index.html", { root: __dirname });
});

app.get("/login.html", (req, res) => {
  res.sendFile("./login.html", { root: __dirname });
});

app.post("/login", jsonParser, (req, res) => {
  console.log("Hello");
  console.log(req.body.password);
  res.json(req.body.password);
});

app.get("/signup.html", (req, res) => {
  res.sendFile("./signup.html", { root: __dirname });
});

app.post("/signup", urlencodedParser, (req, res) => {});

app.use((req, res) => {
  res.sendFile("./404.html", { root: __dirname });
});

当我使用以下负载向 /login 路径发送 POST 请求时:

{
    "password": "Check for Stack Overflow"
}

我在控制台上得到这个:

$ node app
Error: ENOENT: no such file or directory, stat '/root/404.html'
Hello
Check for Stack Overflow

我使用以下终点:http://2886795314-3000-ollie08.environments.katacoda.com/

我用 POSTMan 现在得到了这个:


上一个答案...

您必须使用 res 对象才能发送内容。例如,发送一个JSON结构,你可以这样做:

res.json(req.body.password)

因此您的代码将是:

const express = require("express");
const bodyParser = require("body-parser");
const app = express();
const urlencodedParser = bodyParser.urlencoded({ extended: false });

app.get("/login.html", (req, res) => {
  res.sendFile("./login.html", { root: __dirname });
});

app.post("/login", urlencodedParser, (req, res) => {
  res.json(req.body.password);
});

我还看到您没有使用 .listen 或导出您的模块。您可能还需要监听 运行 的端口!所以使用:

app.listen(3000, () => {
  console.log("Server started in port 3000!");
});

最后。所以你的完整文件看起来像:

const express = require("express");
const bodyParser = require("body-parser");
const app = express();
const urlencodedParser = bodyParser.urlencoded({ extended: false });

app.get("/login.html", (req, res) => {
  res.sendFile("./login.html", { root: __dirname });
});

app.post("/login", urlencodedParser, (req, res) => {
  res.json(req.body.password);
});

app.listen(3000, () => {
  console.log("Server started in port 3000!");
});

此外,请考虑阅读Express "Hello World" example。它以最简单的方式提供了原始文档中最好的示例。

req.body.password 有点像变量。它 'returns' 它是有价值的,但你没有用它 return 做任何事情。

不清楚 return 是什么意思。如果您想将某些内容记录到控制台,您可以这样做:

console.log(req.body.password);