【问题标题】:Type error when sending 'data' in post request在发布请求中发送“数据”时输入错误
【发布时间】:2017-12-05 13:04:09
【问题描述】:

所以我试图发送一个带有“区域”属性的对象的POST 请求。这将返回一些仅位于某个区域周围的数据。我使用的 API 在 php 中,但我使用的是 javascript。我已经提出了POST 请求并且一直在获取信息,但是当我试图告诉它我想使用哪个“区域”时,我无法让它工作。 API 说该区域需要一个数组,但是当我在 javascript 中执行此操作时,我得到一个TypeError。这是 API:

search_area_name:在特定区域内搜索。如果将使用此搜索条件,建议构建一个选择列表以供选择。 值:(数组)

在php中设置数据的例子如下:

$data = array (
    'partner_key' => '7e52cad4e91ee36e308d35f93a9db02b', 
    'action' => 'propertySearch',                       
    'return' => 'xml',                                  
    'search_offset' => '0', 
    'search_limit' => '100',                            
    'search_mls_id' => array('1'),
    'search_area_name'=>array("Kimball","Silver Creek Commercial"),
    'debug' => '0'
);

我的 POST 请求在 javascript 中设置了我的数据:

app.get("/listing", function (req, res) {

    var listingID      = req.query.id, //passing these in later..
        listingAddress = req.query.address,
        listingArea    = [req.query.area];


    var data = {
        partner_key       : '7e52cad4e91ee36e308d35f93a9db02b',
        action            : 'propertySearch',
        return            : 'json',
        search_offset     : '0',
        search_limit      : '15',
        search_mls_id     : ['1'],
        search_area_name  : listingArea,
        debug             : '0'
    };

    request.post({url: url, formData: data}, function(err, httpResponse, body) {
        if (!err && httpResponse.statusCode == 200) {
            var mlsData = JSON.parse(body);
            res.render('listing', {mlsData: mlsData['data']});
        }
        else {
            return console.error('upload failed:', err);
        }
    });
});

所以我意识到要阅读的内容很多,但如果我取出 search_area_name 属性,一切都很好,我会收到我期望的确切响应。当我使用search_area_name 属性运行脚本时,我收到TypeError。任何建议或意见将不胜感激!

编辑,附加信息:

这是我的浏览器将显示的内容(以防万一):

TypeError: /Users/blazekotsenburg/WebstormProjects/ResidePC/assets/views/listing.ejs:129
    127| <%include partials/filter-suggest.ejs%>
    128| 
 >> 129| <%include partials/listingGridTemplate.ejs%>
    130| 
    131| <%include partials/footer.ejs%>

esc is not a function
    at rethrow (/Users/blazekotsenburg/WebstormProjects/ResidePC/node_modules/ejs/lib/ejs.js:285:18)
    at eval (eval at compile (/Users/blazekotsenburg/WebstormProjects/ResidePC/node_modules/ejs/lib/ejs.js:524:12), <anonymous>:268:9)
    at eval (eval at compile (/Users/blazekotsenburg/WebstormProjects/ResidePC/node_modules/ejs/lib/ejs.js:524:12), <anonymous>:270:10)
    at returnedFn (/Users/blazekotsenburg/WebstormProjects/ResidePC/node_modules/ejs/lib/ejs.js:555:17)
    at tryHandleCache (/Users/blazekotsenburg/WebstormProjects/ResidePC/node_modules/ejs/lib/ejs.js:203:34)
    at View.exports.renderFile [as engine] (/Users/blazekotsenburg/WebstormProjects/ResidePC/node_modules/ejs/lib/ejs.js:412:10)
    at View.render (/Users/blazekotsenburg/WebstormProjects/ResidePC/node_modules/express/lib/view.js:128:8)
    at tryRender (/Users/blazekotsenburg/WebstormProjects/ResidePC/node_modules/express/lib/application.js:640:10)
    at Function.render (/Users/blazekotsenburg/WebstormProjects/ResidePC/node_modules/express/lib/application.js:592:3)
    at ServerResponse.render (/Users/blazekotsenburg/WebstormProjects/ResidePC/node_modules/express/lib/response.js:971:7)

listingGridTemplate.ejs,我猜这是失败的地方,即使它在该属性未通过时也有效,是这样的:

<div class="row grid-list"><!-- Begin First Row-->
    <div class="container">

        <h1 id="featured-listings">Featured Listings</h1>

        <% mlsData.forEach(function(listing) { %>
            <div class="col-lg-4 col-md-4 col-sm-6">

                <div id= "<%= listing['list_id']%>">

                    <% var listingImage = listing['photos'].split(",");%>
                    <% if (!listingImage[0]) { %>

                        <div class="thumbnail photo-card">

                            <%include listingGridStatus.ejs%>

                            <a href="/listing?id=<%=listing['list_id']%>?area=<%=listing['area_name']%>?address=<%=listing['address']%>">

                            <img class="img-responsive" src="https://source.unsplash.com/wtrAchtpc-w">

                                <p class="no-image-header">No Images <i class="fa fa-frown-o" aria-hidden="true"></i></p>

                                <section class="photo-card-info-spec-row1">
                                    <span class="photo-card-price">
                                        $<%= listing['price'].replace(/\B(?=(\d{3})+(?!\d))/g, ",") %>
                                    </span>
                                    <span class="photo-card-info">
                                        <%include listingGridPropCheck.ejs%>
                                    </span>
                                </section>

                                <section class="photo-card-info-spec-row2">

                                    <span class="photo-card-dom">

                                        <span class="dom">dom:</span>

                                        <%= listing['days_on_market']%>
                                    </span>

                                    <span class="photo-card-punct">|</span>

                                    <span class="photo-card-address">

                                        <%= listing['address']%>,
                                        <%= listing['city']%>,
                                        <%= listing['state']%>
                                    </span>
                                </section>
                            </a>
                        </div>
                    <% } else { %>

                        <div class="thumbnail photo-card">

                            <%include listingGridStatus.ejs%>

                            <a href="/listing?id=<%=listing['list_id']%>&address=<%=listing['address']%>&area=<%=listing['area_name']%>">

                                <img class="img-responsive img-drop-shadow" src="http://www.realcove.net/<%= listingImage[0]%>">

                                <section class="photo-card-info-spec-row1">
                                    <span class="photo-card-price">
                                        $<%= listing['price'].replace(/\B(?=(\d{3})+(?!\d))/g, ",") %>
                                    </span>

                                    <span class="photo-card-info">
                                        <%include listingGridPropCheck.ejs%>
                                    </span>
                                </section>

                                <section class="photo-card-info-spec-row2">

                                <span class="photo-card-dom">

                                    <span class="dom">dom:</span>

                                        <%= listing['days_on_market']%>
                                    </span>

                                    <span class="photo-card-punct">|</span>

                                    <span class="photo-card-address">
                                        <%= listing['address']%>,
                                        <%= listing['city']%>,
                                        <%= listing['state']%>
                                    </span>
                                </section>
                            </a>
                        </div>
                    <% } %>
                </div>
            </div>
        <% }); %>
    </div> 
</div>

【问题讨论】:

  • request.post() 来自什么框架?这不是 Javascript 内置函数。
  • 这是 Node.js 吗?
  • 是的,这是 node.js,对不起,我已经拥有了这么多,所以我忘了放这个
  • @Barmar 我相信这是节点和快递
  • 是的,节点快递和请求

标签: javascript node.js express post typeerror


【解决方案1】:

很抱歉没有将此作为评论发布(还没有 50 个代表)。我可以给您的一个建议是让您放置一些调试消息,以查看传递给您的变量的确切内容。

在您的 var 定义上方添加一个 console.log([req.query.area]);,并在您的发布请求之前再添加一个 console.log(listingArea)。如果您收到一些乱码值,请检查您的控制台,这应该是您的起点。希望对您有所帮助!

编辑: 我相信我找到了可能对您有所帮助的相关答案。 试试https://stackoverflow.com/a/15851761/7654934

【讨论】:

  • 我已经这样做了,当我这样做时它会打印['The Canyons']。 (或其他任何数据,但它是string 类型的Array
  • @blizzyb hmmm 也许可以查看这个答案link 看看是否对您有帮助!
【解决方案2】:

我相信您只需要删除 req.query.area 周围的方括号

listingArea    = req.query.area;

【讨论】:

  • 我希望是这样,但我也试过了,仍然返回TypeError :(
  • 你试过硬编码数组吗?还是错误?
  • 是的,这仍然给我一个错误..这就是为什么我很困惑哈哈
猜你喜欢
  • 1970-01-01
  • 2016-04-08
  • 2021-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-23
  • 1970-01-01
  • 2019-12-13
相关资源
最近更新 更多