Приложение не работает, я не получаю вывод - PullRequest
0 голосов
/ 28 ноября 2018
var express = require("express");
var app = express();
var bodyParser = require('body-parser');
var port = 3000;
const fs = require('fs');

// we are connecting to the  mangodb using mangoose
var mongoose = require("mongoose");

// Now we are using bodyParser
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
mongoose.connect("mongodb://localhost:27017/YourDB", { useNewUrlParser: true })

// now we are creating the schema to the database
var nameSchema = new mongoose.Schema({
 firstName: String,
 lastNameName: String
});

// Now we have to create a model

var User = mongoose.model("User", nameSchema);



app.use("/", (req,  res) => {
 res.sendFile(__dirname + "/index.html");

});
// Now we are posting the data



app.post("/addname", (req, res) => {
  console.log("nnnnnn")
  console.log(req.body.firstName)
 var myData = new User(req.body);
 myData.save()
 console.log(myData);
 fs.writeFile(__dirname +"/data.json",myData,  function(err){
   if(err) {
     return console.log(err);
   }
   console.log("The file is saved ");
 })
 console.log(myData)

})

// Now we are getting the data


app.listen(port, () => {
 console.log("Server listening on port " + port);
});

1) Я использую экспресс app.post для отправки данных в базу данных и сохраняю данные в файле записи для проверки

2) app.post не работает, он попробовал console.logчтобы проверить, но это не происходит внутри функции

3) Я не получаю вывод, а любая ошибка, пожалуйста, помогите мне

Ответы [ 2 ]

0 голосов
/ 28 ноября 2018

Это потому, что каждый запрос идет к этому app.use кодовому блоку.app.use("/", (req, res) => { ... });

Просто поместите его под app.post("/addname", (req, res) => { ... });

app.use, который используется для монтирования промежуточного программного обеспечения в цепочку запрос-ответ.Таким образом, каждый поступающий запрос соответствует / (который, по сути, является каждым запросом), идет внутри этого промежуточного программного обеспечения.Итак, сначала используйте ваши маршруты, затем используйте промежуточное ПО в конце.

Надеюсь, это поможет.

РЕДАКТИРОВАТЬ:
Позвольте мне дать вам mcve, который я тестировал локально:

const express = require('express');
const fakeData = function(){
    return {
        s: "fakeData"
    }
}
const app = express();
const port = 8181
const path = require('path')
app.get("/a", (req,  res) => {
    return res.json({d:'yay'});

   });
app.use('/',(req,res)=>{
    return res.json(fakeData());
})

app.listen(port, () => {
    console.log(`Server started on PORT ${port}`);
});

Поскольку каждый запрос проходит через смонтированное промежуточное ПО, поэтому, когда вы GET / POST / НИЧЕГО получаете localhost:8181/<abosulutely_any_path>, он будетПройдите через app.use, потому что он обрабатывает эту функцию как промежуточное ПО и вернет { s: "fakeData" }.

Но когда вы сделаете GET вызов http://localhost:8181/a, он перейдет к app.get маршрут ПОТОМУ ЧТО МЫ ОБЪЯВИЛИ ЕГО ПЕРВЫЙ и возвращаемся { d : "yay" }

0 голосов
/ 28 ноября 2018

в этом коде нет обработки ошибок и обработки ответов.это будет читабельно, если мы напишем post метод с async/await:

app.post("/addname", async (req, res) => {
  console.log("nnnnnn")
  console.log(req.body.firstName)
 var myData = new User(req.body);
 await myData.save()
 console.log(myData);
 fs.writeFileSync(__dirname +"/data.json", myData)
 console.log(myData)
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...