Node.js 带坐标的Mapbox反向地理编码

Node.js 带坐标的Mapbox反向地理编码,node.js,mongodb,express,Node.js,Mongodb,Express,我目前正在研究 反向地理编码。我使用在mapbox文档中找到的示例。我的模式如下所示: const mongoose = require("mongoose"); const PostSchema = new mongoose.Schema({ title: { type: String, required: [true, "empty field"] }, description: { type: String, required: [true,

我目前正在研究 反向地理编码。我使用在mapbox文档中找到的示例。我的模式如下所示:

const mongoose = require("mongoose");

const PostSchema = new mongoose.Schema({
  title: {
    type: String,
    required: [true, "empty field"]
  },

  description: {
    type: String,
    required: [true, "empty field"]
  },
  images: [String],
  coordinates: Array,
  comments: [
    {
      type: mongoose.Schema.Types.ObjectId,
      ref: "Comment"
    }
  ],
  date: { type: Date, default: Date.now },
  views: { type: Number, default: 0 }
});

module.exports = mongoose.model("Post", PostSchema);
let title = req.body.title;
  let description = req.body.description;
  let content = req.body.content;
  let address = req.body.address;
  let city = req.body.city;
  let zip = req.body.zip_code;
  let region = req.body.region;

  geocodingClient
    .reverseGeocode{
      query: [address, city, zip, region],
      limit: 10
    })
    .send()
    .then(response => {
      const match = response.body;
      const coordinates = match.features[0].geometry.coordinates;
      const newPost = {
        title: title,
        description: description,
        content: content,
        images: images,
        coordinates: coordinates
      };

      Post.create(newPost)
        .then(newCreatedPost => {
          if (newCreatedPost) {
            res.redirect("/blog");
            console.log(newPost.coordinates);
          } else {
            res.send("where is the post");
          }
        })
        .catch(err => {
          // req.flash("error", err.message);
          // res.redirect("/blog/new");
          console.error(err.message);
        });
    });
}
然后我尝试从输入字段中获取位置

<% include ../partials/header %>
<div class="container">
  <div class="row">
    <div class="col-md-6">
      <form action="/blog" method="post" enctype="multipart/form-data">
        <div class="form-group">
          <label for="title-text">Title:</label>
          <input
            id="title-text"
            type="text"
            name="title"
            class="form-control"
            placeholder="title"
          />
        </div>

        <div class="form-group">
          <label for="description-text">Description:</label>
          <textarea
            id="description-text"
            class="form-control"
            name="description"
            id="textField"
            cols="30"
            rows="10"
            placeholder="description"
          ></textarea>
        </div>

        <div class="form-group">
          <label for="location-text">Address:</label>
          <input
            id="location-text geocoder"
            class="form-control geocoder"
            type="text"
            name="address"
            placeholder="1234 Main St"
          />
        </div>
        <div class="form-row">
          <div class="from-group col-md-6">
            <label for="inputCity">City</label>
            <input type="text" name='city' class="form-control" id="inputCity">
          </div>
          <div class="form-group col-md-4">
            <label for="inputState">State</label>
            <select id="inputState" name='region' class="form-control">
              <option selected>Choose...</option>
                  <option value="AL">Alabama</option>
                  <option value="AK">Alaska</option>
                  <option value="AZ">Arizona</option>
                  <option value="AR">Arkansas</option>
                  <option value="CA">California</option>
                  <option value="CO">Colorado</option>
                  <option value="CT">Connecticut</option>
                  <option value="DE">Delaware</option>
                  <option value="FL">Florida</option>
                  <option value="GA">Georgia</option>
                  <option value="HI">Hawaii</option>
                  <option value="ID">Idaho</option>
                  <option value="IL">Illinois</option>
                  <option value="IN">Indiana</option>
                  <option value="IA">Iowa</option>
                  <option value="KS">Kansas</option>
                  <option value="KY">Kentucky</option>
                  <option value="LA">Louisiana</option>
                  <option value="ME">Maine</option>
                  <option value="MD">Maryland</option>
                  <option value="MA">Massachusetts</option>
                  <option value="MI">Michigan</option>
                  <option value="MN">Minnesota</option>
                  <option value="MS">Mississippi</option>
                  <option value="MO">Missouri</option>
                  <option value="MT">Montana</option>
                  <option value="NE">Nebraska</option>
                  <option value="NV">Nevada</option>
                  <option value="NH">New Hampshire</option>
                  <option value="NJ">New Jersey</option>
                  <option value="NM">New Mexico</option>
                  <option value="NY">New York</option>
                  <option value="NC">North Carolina</option>
                  <option value="ND">North Dakota</option>
                  <option value="OH">Ohio</option>
                  <option value="OK">Oklahoma</option>
                  <option value="OR">Oregon</option>
                  <option value="PA">Pennsylvania</option>
                  <option value="RI">Rhode Island</option>
                  <option value="SC">South Carolina</option>
                  <option value="SD">South Dakota</option>
                  <option value="TN">Tennessee</option>
                  <option value="TX">Texas</option>
                  <option value="UT">Utah</option>
                  <option value="VT">Vermont</option>
                  <option value="VA">Virginia</option>
                  <option value="WA">Washington</option>
                  <option value="WV">West Virginia</option>
                  <option value="WI">Wisconsin</option>
                  <option value="WY">Wyoming</option>
                  <option value="">-- CANADA --</option>
                  <option value="AB">Alberta</option>
                  <option value="BC">British Columbia</option>
                  <option value="MB">Manitoba</option>
                  <option value="NB">New Brunswick</option>
                  <option value="NF">Newfoundland and Labrador</option>
                  <option value="NT">Northwest Territories</option>
                  <option value="NS">Nova Scotia</option>
                  <option value="NU">Nunavut</option>
                  <option value="ON">Ontario</option>
                  <option value="PE">Prince Edward Island</option>
                  <option value="PQ">Quebec</option>
                  <option value="SK">Saskatchewan</option>
                  <option value="YT">Yukon Territory</option>
            </select>
          </div>
          <div class="form-group col-md-2">
            <label for="inputZip">Zip</label>
            <input type="text" name='zip_code'class="form-control" id="inputZip">
          </div>
        </div>

        <div class="form-group input-file-container">
          <label for="my-file" class="input-file-trigger" tabindex="0"
            >Select a images...</label
          >
          <input
            id="my-file"
            class="form-control-file input-file"
            type="file"
            name="images"
            multiple="multiple"
            required
          />
        </div>

        <div class="form-group">
          <button class="btn btn-lg btn-primary btn-block" >Submit</button>
        </div>
      </form>
    </div>
  </div>
</div>

  <a href="/blog">back...</a>




  <% include ../partials/footer %>
</div>
当他试图创建一个新帖子时,会出现以下错误:

Error: query must be a string.

有没有人已经遇到过这样的问题,并且知道如何解决它。我将非常感激每一个提示

反向地理编码是关于将(纬度、经度)坐标转换为特征的。您的代码正在调用反向编码API,但正在传递正常的地理编码(地址)信息。这种反向地理编码对我来说很有效:

geocodingClient
  .reverseGeocode({
    query: [-58.5003038, -34.5741957]
  })
  .send()
  .then(response => {
     const match = response.body;
     console.log(response);
  })
  .catch(err => {
     console.error(err.message);
});

什么是geocodingClient?您能给我们指出文档吗?地理编码客户端看起来像这样:const mbxGeocoding=require(“@mapbox/mapbox sdk/services/Geocoding”);const geocodingClient=mbxGeocoding({accessToken:process.env.map\u Box\u Token});现在我明白了。在我看来,这是为了得到完整的地址,这就是为什么我尝试反向地理编码。我想我应该从response.body上取下整个地址。