首页 > 解决方案 > 如何将我的非输入 ejs 发送到 MongoDB Atlas

问题描述

这是我的 app.js

const express = require('express');
const https = require('https');
const bodyParser = require('body-parser');
const mongoose = require('mongoose');

mongoose.connect("mongodb+srv://Tibor:asdfsadf@weatherdb.pcmad.mongodb.net/weatherDB")


//Adatszerkezet (schema) Mongo-hoz

const weatherSchema = {
  varos: String,
  lat: Number,
  lon: Number,
  homerseklet: Number,
  meresideje: Date,
  szelirany: Number,
  szelsebesseg: Number,
  legnyomashPa: Number,
  legnyomashgmm: Number,
  paratartalom: Number,
  felhozet: Number
  
}

//model

const Weather = mongoose.model("Weather", weatherSchema) 


const app = express();
app.set('view engine', 'ejs');
app.use(bodyParser.urlencoded({extended: true}));

app.use(express.static("public"));

app.get('/', (req, res) => {
  //res.send('express működik')
  res.render('index', {data: ''});
})

//API elérése(éss mongoDB Post)
app.post('/', (req, res) => {
  const location = req.body.location ? req.body.location : "Budapest";
  const appId = "asdfasdfasd";
  const url = "https://api.openweathermap.org/data/2.5/weather?q=" + location + "&appid=" + appId + "&units=metric";

  

  https.get(url, (response) => {
    if (response.statusCode === 200) {
      response.on("data", (data) => {
        const weatherData = JSON.parse(data);
        res.render('index', {data: weatherData});
        
      })
    } else {
    
      res.render('index', {data: "0"});
    }
  });

  let newWeather = new Weather({
    varos: req.body.varos,
    lat: req.body.lat,
    lon: req.body.lon,
    homerseklet: req.body.homerseklet,
    meresideje: req.body.homerseklet,
    szelirany: req.body.szelirany,
    szelsebesseg: req.body.szelsebesseg,
    legnyomashPa: req.body.legnyomashPa,
    legnyomashgmm: req.body.legnyomashgmm,
    paratartalom: req.body.paratartalom,
    felhozet: req.body.felhozet
  })
  newWeather.save();
  

});

app.listen(process.env.PORT || 3000, function(){
  console.log('A szerver fut/Port:3000');
});

这是我的 index.ejs。

<!DOCTYPE html>
<html lang="hu">

  <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>WeatherApp</title>
    <link rel="stylesheet" href="/public/style.css">
    <!-- Bootstrap -->
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css"
      integrity="sha384-JcKb8q3iqJ61gNV9KGb8thSsNjpSL0n8PARn9HuZOnIxN0hoP+VmmDGMN5t9UJ0Z" crossorigin="anonymous">
  </head>
  <body>
    <!-- Már régóta ki akartam próbálni az EJS-t és úgy gondoltam ez egy jó alkalom rá. -->
    
    <!-- Ha talált adatot -->
    <% if (data === '') { %>
    <div class="container mt-4 col-lg-5">
      <!-- Title -->
    <h4 class="font-weight-bold">Melyik város időjárását szeretnéd megtekinteni?</h4>

      <!-- Város gombok -->
    <form action="/" method="post">
      <div class="form-group mt-3">
        <button type="submit" class="btn btn-primary btn-lg btn-block" name="location"  value="Budapest">Budapest</button>
        <button type="submit" class="btn btn-primary btn-lg btn-block" name="location"  value="Győr">Győr</button>
        <button type="submit" class="btn btn-primary btn-lg btn-block" name="location"  value="Debrecen">Debrecen</button>
        <button type="submit" class="btn btn-primary btn-lg btn-block" name="location"  value="Miskolc">Miskolc</button>
        <button type="submit" class="btn btn-primary btn-lg btn-block" name="location"  value="Pécs">Pécs</button>
        <button type="submit" class="btn btn-primary btn-lg btn-block" name="location"  value="Sopron">Sopron</button>
        <button type="submit" class="btn btn-primary btn-lg btn-block" name="location"  value="Szeged">Szeged</button>
        <button type="submit" class="btn btn-primary btn-lg btn-block" name="location"  value="Gyékényes">Gyékényes</button>
      </div>
    </form>
    
    <% } else { %>

    <div class="container mt-3 ">
    <!-- Időjárás szerkezet -->
      <div class="card">
        <div class="card-body">
          <!-- "head" -->
          <h5 class="card-title" name="varos"><%= data.name %></h5> 
          <h8><%= data.sys.country %></h8>
          <div class="container">
            <p class="text-muted" name="lat"><%= data.coord.lat %></p> 
            <p class="text-muted" name="lon"><%= data.coord.lon %></p>
          </div>
          <!-- icon -->
          <img class="float-right" src="http://openweathermap.org/img/wn/<%= data.weather[0].icon %>@2x.png" alt="icon">
          <!-- Hőmérséklet -->
          <p class="display-1" name="homerseklet"><%= data.main.temp%><sup>o</sup>C</p>
          <!-- Hőérzet -->
          <span class="text-muted">Hőérzet: <%= data.main.feels_like %><sup>o</sup>C</span>
          <!-- Az adatok mérésének időpontja -->
          <h5 class="font-weight-bold">Mérés időpontja:</h5> 
          <h6 name="meresideje"><%= new Date(data.dt*1000) %></h6>
      
          <!-- Másodlagos adatok -->               
          <div class="container mt-3 text-center ">
            <div class="row font-weight-bold border-top border-info">
              <div class="col border-right border-info"><i class="fas fa-paper-plane"></i> Szélirány</div>
              <div class="col"></div>
              <div name="szelirany" class="col"><%= data.wind.deg %>°</div>
            </div>
            <div class="row font-weight-bold">
              <div class="col border-right border-info"><i class="fas fa-wind"></i> Szélsebesség</div>
              <div class="col"></div>
              <div name="szelsebesseg" class="col"><%= data.wind.speed %>m/s</div>
            </div>
            <div class="row font-weight-bold">
              <div class="col border-right border-info"><i class="fas fa-spinner"></i> Légnyomás</div>
              <div name="legnyomashPa" class="col"><%= data.main.pressure %>(hPa)</div>
              <div name="legnyomashgmm" class="col"><%= data.main.pressure * 0.75 %>(hgmm)</div>
            </div>
            <div class="row font-weight-bold">
              <div class="col border-right border-info"><i class="fas fa-water"></i> Páratartalom</div>
              <div class="col"></div>
              <div name="paratartalom" class="col"><%= data.main.humidity %>%</div>
            </div>
            <div class="row font-weight-bold">
              <div class="col border-right border-info"><i class="fas fa-eye"></i> Látási-viszonyok</div>
              <div class="col"></div>
              <div class="col"><%= data.visibility/1000 %>km</div>
            </div>
            <div class="row font-weight-bold">
              <div class="col border-right border-info"><i class="fas fa-cloud"></i> Felhőzet</div>
              <div class="col"></div>
              <div name="felhozet" class="col"><%= data.clouds.all %>%</div>
            </div>           
          </div>

        </div>
      </div>


      <!-- Másik város gomb(to /) -->
      <div class="text-center">
        <a href="/" class="btn btn-primary mx-auto btn-lg btn-block">Másik Település</a>
      </div>
    </div>
    <!-- ejs end -->
    <% } %>
    <script src="https://kit.fontawesome.com/ad862d8e11.js" crossorigin="anonymous">
    
    </script>
  </body>

</html>

所以就是这样。

不知何故,如果我检查 MongoDB,我只看到只有一个 id 的空对象,也许我没有提交它或者我的 ejs 错误?(我是新手)另外,如果有人知道我该怎么做,检查自上一个日期以来是否有 10 分钟没有过去,然后使用这些测量值?欢迎任何帮助!

标签: node.jsmongodbexpressmongooseejs

解决方案


mongoose.connect('mongodb://localhost:27017/test');
const Cat = mongoose.model('Cat', { name: String });
const kitty = new Cat({ name: 'Zildjian' });
kitty.save().then(() => console.log('meow'));```

```.save()``` is returns a promise resolves with ```(err)```
check that

推荐阅读