为什么 request.body 未定义?

2024-01-17

我有一个 Node-js 服务器,其中包括 bodyparser 和所有内容:

var express = require('express');
var dbcon = require('./app/db/databaseconnection');
var bodyParser = require('body-parser');

var app = express();
var router = express.Router();

var filepath = __dirname + '/views/';
app.set('view engine', 'ejs');
app.use(express.static(__dirname + '/public'));
app.use('/', router);
app.use(bodyParser);
app.use(bodyParser.json()); // support json encoded bodies
app.use(bodyParser.urlencoded({ extended: false })); // support encoded bodies
app.use('*', (request, response) => response.render(filepath + '404', { page_name: '404' }));


// var results = dbcon.getProducts().then(results => {
//      return results;
//  }).catch(err => { console.log(err) })
 //ejs.render(store , { results });
router.get('/', (request, response) => response.render(filepath + 'index', { page_name: 'home' }));
router.get('/store', (request, response) => {
    return dbcon.getProducts().then(results => {
        return response.render(filepath + 'store', { page_name: 'store', products: results });
    });
});
router.get('/product', (request, response) => {
    return dbcon.getProductDetails().then(results => {
        return response.render(filepath + 'product', { page_name: 'product', products: results, req: request });
    });
});
router.get('/purchase', (request, response) => {
    return dbcon.getProductDetails().then(results => {
        response.render(filepath + 'purchase', { page_name: 'purchase', products: results, req: request, res: response });
    });
});
router.post('/purchase', (request, response) => {
    //return dbcon.createCustomer(request.body.fname, request.body.lname, request.body.address, request.body.city, request.body.state, request.body.country, request.body.zip, request.body.phone, request.body.cardnumber, request.body.cardtype, request.body.expirationdate, request.body.securitycode, request.body.cardaddress, request.body.productID);
    console.log(request.body.name);
    response.redirect('/receipt');
});
router.get('/receipt', (request, response) => response.render(filepath + 'receipt', { page_name: 'receipt' }));
router.get('/about', (request, response) => response.render(filepath + 'about', { page_name: 'about' }));
router.get('/contact', (request, response) => response.render(filepath + 'contact', { page_name: 'contact' }));
router.get('/build', (request, response) => response.render(filepath + 'build/build'));
router.get('/learn', (request, response) => response.render(filepath + 'learn/learn'));

app.listen(3000, () => console.log("Server running at Port 3000"));

我还有一个 ejs 页面,其中包含一个表单:

<!DOCTYPE html>
<html>

<head>
    <title>PC Store | Purchase</title>
    <% include partials/header %>
    <link rel="stylesheet" link="/css/purchaseCanvas.css" />
    <script src="/js/toggleCountries.js"></script>
</head>

<body>
    <header>
        <% include partials/navbar %>
    </header>
    <main>
    <div class="container">
        <h1 align="center">Order</h1>
        <div class="orderproduct center">
        <% for (var i = 0; i < products.length; i++) { 
            //console.log(products[i]); 
            if (products[i].model == req.query.product) { %>
            <h4>Product: </h4>
            <img src="/img/productImages/<%= products[i].image01 %>" width="100">
            <h5>Brand: <%= products[i].brand %></h5>
            <h5>Model: <%= products[i].model %></h5>
            <h5>Series: <%= products[i].series %></h5>
            <h5>Price: $<%= products[i].price %></h5>
            <input type="hidden" id="productID" name="productID" value="<%= products[i].productID %>">
            <hr>
        <% }} %>
        </div>
        <form action="/purchase" method="post">
            <div class="canvas">
                <br><br>
                <div class="center">
                    <input type="text" class="form-control" id="fname" name="fname" placeholder="First Name" required>
                    <p id="fnameError" class="errorText"></p>
                </div><br>
                <div class="center">
                    <input type="text" class="form-control" id="lname" name="lname" placeholder="Last Name" required>
                    <p id="lnameError" class="errorText"></p>
                </div><br>
                <div class="center">
                    <input type="text" class="form-control" id="address" name="address" placeholder="Shipping Address" required>
                    <p id="addressError" class="errorText"></p>
                </div><br>
                <div class="center">
                    <input type="text" class="form-control" id="city" name="city" placeholder="City" required>
                    <p id="cityError" class="errorText"></p>
                </div><br>
                <div class="center">
                    <select class="form-control" id="country" name="country"></select>
                    <p id="countryError" class="errorText"></p>
                </div><br>
                <div class="center">
                    <select class="form-control" id ="state" name="state">
                        <option value="-1">Select State</option>
                    </select>
                    <p id="stateError" class="errorText"></p>
                </div> <br>
                <script>populateCountries("country", "state");</script>
                <div class="center">
                    <input type="text" class="form-control" id="zip" name="zip" placeholder="Zip Code" required>
                    <p id="zipError" class="errorText"></p>
                </div><br>
                <div class="center">
                    <input type="tel" class="form-control" id="phone" name="phone" placeholder="Phone Number" required>
                    <p id="phoneError" class="errorText"></p>
                </div><br>
                <div class="center">
                    <input type="text" class="form-control" id="cardnumber" name="cardnumber" placeholder="Card Number" required>
                    <p id="cardnumberError" class="errorText"></p>
                </div><br>
                <div class="center">
                    <select class="form-control" id="cardtype" name="cardtype">
                        <option value="-1">Select Card Type</option>
                        <option value="Visa">Visa</option>
                        <option value="MasterCard">MasterCard</option>
                        <option value="American Express">American Express</option>
                        <option value="Discover">Discover</option>
                    </select>
                    <p id="cardtypeError" class="errorText"></p>
                </div> <br>
                <div class="center">
                    <input type="date" class="form-control" id="expirationdate" name="expirationdate" placeholder="Expiration Date" required>
                    <p id="expirationdateError" class="errorText"></p>
                </div><br>
                    <div class="center">
                    <input type="text" class="form-control" id="securitycode" name="securitycode" placeholder="Security Code" required>
                    <p id="securitycodeError" class="errorText"></p>
                </div><br>
                <div class="center">
                    <input type="text" class="form-control" id="cardaddress" name="cardaddress" placeholder="Billing Address" required>
                    <p id="cardaddressError" class="errorText"></p>
                </div><br>
                <div class="center">
                    <input type="submit" class="btn btn-primary" value="Order">
                </div>
            </div>
        </form>
    </div>
    </main>
    <footer>
        <% include partials/footer %>
    </footer>
</body>

</html>   

我从一篇文章中读到,您可以使用 request.body 从表单中的输入中获取值。所以我尝试这样做,但没有成功。 当我执行 request.body 时,它显示未定义,当我尝试执行 request.body.fname 时,它​​显示错误并且该名称不存在。有人知道可能是什么问题吗?人们说这是因为 app.use 的顺序,但我尝试更改它,但仍然不起作用。请帮忙!


看起来您正在连接路线before任何解析中间件,这可以解释为什么你没有得到any主体(通常如果它连接正确,你至少会得到一个空物体)。

app.use('/', router);
app.use(bodyParser.json()); // support json encoded bodies
app.use(bodyParser.urlencoded({ extended: false })); // support encoded bodies

需要是

app.use(bodyParser.json()); // support json encoded bodies
app.use(bodyParser.urlencoded({ extended: false })); // support encoded bodies
app.use('/', router);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 request.body 未定义? 的相关文章

随机推荐

  • 切换弹出窗口并在外部单击时切换它

    我有一个问题 我正在尝试制作一个弹出窗口切换toggleClass 不过 我还制定了一条从 StackOverflow 获得的规则 当在外部单击时 弹出窗口会消失 但是 当我单击登录按钮时 它会出现 但我无法再使用登录按钮使其消失 但我已经
  • 2D OpenGL 场景因大量重叠形状而变慢

    我正在使用 OpenGL 绘制 2D 形状 他们没有使用那么多多边形 我注意到我可以有很多很多的形状 只要它们不重叠 如果我在一个形状后面得到一个形状 等等 它真的开始滞后 我觉得我可能做错了什么 这是正常的吗 有没有办法解决这个问题 我不
  • 猫效应和异步 IO 细节

    这几天我一直在思考猫效应和 IO 我觉得我对这种效果有一些误解 或者只是我错过了它的要点 首先 如果IO可以取代Scala的Future 我们如何创建异步IO任务 使用IO shift Using IO async Is IO delay同
  • 将 pandas 中的多列除以另一列

    我需要将 DataFrame 中除第一列以外的所有列除以第一列 这就是我正在做的事情 但我想知道这是否不是 正确的 熊猫方式 df pd DataFrame np random rand 10 3 columns list ABC df B
  • ActiveRecord has_many 其中表 A 中的两列是表 B 中的主键

    我有一个模型 Couple 有两列 first person id and second person id和另一个模型 Person 其主键是person id并有专栏name 这是我想要的用法 including Person mode
  • 有开源的 WPF 仪表控件吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 使用数组设置 Excel 范围格式

    我过去曾使用变体数组来填充一系列 Excel 单元格 我想知道 有没有办法对单元格格式做同样的事情 我不想逐个单元格地进行操作 最好尽量减少获取 Excel 范围的调用次数 我主要按照兰斯的建议去做 但是 在某些情况下 我会使用我想要设置的
  • PHP Session 变量未保存

    我已经查看了有关会话变量未保存的所有问题 但没有看到我的问题 所以我要问它 我有一个表单 一旦提交 它就会在我的数据库中搜索该名称 初始表格位于第 1 页 在第 2 页上 我从第 1 页获取变量并像这样保存 searchTerm POST
  • EditText 多重编辑填充检查

    我正在创建一个项目 其中填充了 3 个编辑文本我想检查 3 个编辑文本中的任何一个是否应该填充 3 个编辑文本中的任何一个我知道如何检查所有 edittext 值中是否都有数据 private boolean validate edit1
  • MySQL 中的时间戳比日期时间列快多少?

    这包括两个问题 MySQL的时间戳字段真的比 order by 查询中的日期时间字段快吗 如果上述问题的答案是肯定的 那么速度能快多少 假设在一个有1亿行的表中 经常根据MySQL内部的时间戳字段对一堆100 200k行进行排序 排序时间的
  • 修复 Twitter Bootstrap 中的按钮大小

    I use 推特引导程序 https getbootstrap com 2 3 2 在我的网络应用程序中 我有一张有很多按钮的桌子 按钮的文本随着表行的当前状态而变化 在 Ajax 请求响应之后 我使用 Jquery 更改按钮文本 我的问题
  • Rails - 在控制器中存储 cookie 并从 Javascript、Jquery 获取

    是否可以在控制器中存储用户的 Cookie 或会话 并通过 JS 或 Jquery 访问它来获取 cookie Session值在服务器上可用 你可以这样设置它们在你的控制器中 http apidock com rails ActionCo
  • WPF - 自定义设计音量控制

    我使用 WPF 已经有一段时间了 我需要通过互联网创建以下控件 但找不到合适的 任何人都可以帮助如何实现此功能 单击控件时 值应该增加或减少 我发现我可以使用音量控制或滑块 但不清楚我应该使用什么 谢谢期待 我更喜欢使用进度条来显示此类内容
  • 如何在 Visual Studio 中添加高优先级 TODO 注释?

    添加这样的评论 TODO Refactor this code 在我可以查看的任务列表中创建一个任务等 有一列标记为 让您可以按优先级对这些任务进行排序 如何设置特定任务的优先级 任务的优先级取决于您用来标记它的关键字 您可以通过转到 工具
  • 克隆 TypeScript 对象

    我有一个打字稿课程 export class Restaurant constructor private id string private name string public getId string return this id p
  • 如何从 tmux 会话获取 stdout 和 stderr?

    我正在linux系统中编写一个示例python程序 我在用tmux https linux die net man 1 tmux创建会话并在 tmux session 中执行另一个脚本 我想将 stdout 和 stderr 从 tmux
  • Bash 复杂的管道依赖关系

    I m trying to model a build concurrent pipeline in a single Bash script I know I can use other tools but at this point I
  • OpenGL:在两个元素之间画线

    我需要在我创建的两个网格之间画一条线 每个网格都与不同的模型矩阵相关联 我一直在思考如何做到这一点 我想到了 glMatrixMode GL MODELVIEW glLoadMatrixf first object model matrix
  • iframe 将 origin 发送为 null

    我有一个 iframe 内容是从我正在使用的第三方库注入的 该库正在注入用户需要提交的表单 问题是 当表单初始化时 它们正在执行一些请求 并且标头源作为空值发送 这会导致问题 因为它们的服务器不允许空值 我尝试添加沙箱属性 甚至尝试伪造调用
  • 为什么 request.body 未定义?

    我有一个 Node js 服务器 其中包括 bodyparser 和所有内容 var express require express var dbcon require app db databaseconnection var bodyP