Получение "undefined" в node.js при отправке данных из формы angular - PullRequest
0 голосов
/ 20 июня 2020

Каждый раз, когда я отправляю данные из форм angular, я получаю undefined в бэкэнде (node.js), даже если я использовал body-parser для анализа входящих данных.

server. js

const express= require("express");
const app=express();
const bodyParser = require("body-parser");
const api=require("./server/routes/api");
const cors=require('cors')
 

const port=4440;
app.use(cors())
app.use("/api",api)

app.use(bodyParser.json())
app.use(bodyParser.urlencoded({ extended: false }))

app.get("/", (req,res)=>{
res.send("hello from server")
})

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

Ниже приведен api. js код

api. js

const express= require("express");
const router=express.Router();
const User=require("../models/user")
const mongoose= require('mongoose');

const db="mongodb+srv://srihari:dbuser@cluster0.yuykq.mongodb.net/users?retryWrites=true&w=majority"

mongoose.connect(db,{useNewUrlParser:true,useUnifiedTopology:true},(err)=>{
    if(err){
       console.error("Error" + err)
    }else{
        console.log("DB connected!")
    }

}
)


router.get("/", (req,res)=>{
  res.send("From API route")
})

router.post("/register",(res,req)=>{
    let userData=req.body;
    console.log(userData);
    let user=new User(userData)
    user.save((error,registeredUser) =>{
        if(error){
            console.log(error);
        }else{
            console.log(registeredUser)
        }
    })
})

module.exports=router;

angular код формы

import { Injectable } from '@angular/core';
import { HttpClient, HttpHeaders } from '@angular/common/http';

@Injectable({
  providedIn: 'root'
})
export class UserserviceService {
  url="http://localhost:4440/api/register";
  constructor(private http:HttpClient) { }
 
  registrationdata(user:any){
    console.log(user);
  return this.http.post<any>(this.url,user);
  }

  // loginData(data:any){
  // return this.http.post<any>(this.)
  // }

}

выше приведен код, который находится во внешнем интерфейсе всякий раз, когда я отправляю данные формы, которые он регистрирует в моей консоли, но в серверной части я получаю req.body как «undefined».

Ответы [ 2 ]

0 голосов
/ 20 июня 2020

Я уже видел проблему, и это действительно простая проблема, но ее трудно увидеть, потому что слова очень похожи.

У вас есть опечатка, это очень часто, поэтому: * Должно быть:

router.post("/register",(req,res)=>{

Попробуйте, и он должен работать. Скажите, если нет, и я постараюсь помочь.

0 голосов
/ 20 июня 2020

Первая ошибка. Я вижу, что ваше промежуточное ПО, которое анализирует JSON, находится после API, поэтому оно никогда не прибудет туда, если POST не был направлен на / route, который является единственным после него

также вам не нужен бодипарсер, поскольку express уже может это сделать

измените свой код на что-то вроде этого

const express= require("express");
const app=express();
const api=require("./server/routes/api");
const cors=require('cors')

const port=4440;

app.use(cors())
app.use(express.json()) // Express has already a method to parse json
app.use(express.urlencoded({ extended: false })) //Allso for the url encoded

app.use("/api",api) //<== Move this line AFTER calling body parsers

app.get("/", (req,res)=>{
res.send("hello from server")
})

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...