Could not get any respone - postman, mongoose, nodeJS

0

Piszę prostą apke restową z użyciem nodejs i expressa, jako bazy danych używam mongoDB. Do requestów używam postmana. Problem w tym, że klikam POST i po jakiejś chwili wyskakuje mi error, że nie może dostać żadnej odpowiedzi. Server uruchamia się bez błędów, inne odpowiedzi działają. Oto kod w którym obsługuje POST. W czym problem? Używam mongoDB 4.0.4

routes: product.js

const express = require('express');
const router = express.Router();
const mongoose =  require('mongoose');
const Product = require('../models/product');


router.get('/', (req, res, next) => {
    res.status(200).json({
        message: 'Handling GET requests to /products'
    });
});

router.post('/', (req,res,next)=>{
    const product = new Product({
        _id: new mongoose.Types.ObjectId(),
        name: req.body.name,
        price: req.body.price
    });
    product.save().then(result =>{
        console.log(result);
    })
    .catch(error => console.log(error));
    res.status(201).json({
        message: 'Handling POST requests to /products',
        createdProduct: product
    });
});
//dalej tylko obsluga patch/delete itd

model: product.js

const mongoose = require('mongoose');

const productSchema = mongoose.Schema({
    _id: mongoose.Schema.Types.ObjectId,
    name: String,
    price: Number
})

module.exports = mongoose.model('Product',productSchema);

app.js:

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

const productRoutes = require('./api/routes/products');
const orderRoutes = require('./api/routes/orders');

mongoose.connect('mongodb+srv://mojanazwa:[email protected]/test?authSource=test&w=1',{
        useNewUrlParser: true
    });

app.use(morgan('dev'));
app.use(bodyParser.urlencoded({extended: false}))
app.use(bodyParser.json());

app.use((req,res,next)=>{
    res.header('Access-Control-Allow-Origin', "*");
    res.header('Access-Control-Allow-Headers',
    'Origin,X-Requested-With, Content-Type, Accept, Authorization');
    
    if(req.method == 'OPTIONS'){
        res.header('Access-Control-Allow-Methods', 'PUT, POST, PATCH, DELETE, GET');
        return res.status(200).json({});
    }
});

app.use('/products', productRoutes);
app.use('/orders', orderRoutes);

app.use((req,res,next)=>{
    const error = new Error('Not found');
    error.status(404);
    next(error);
})

app.use((error,req,res,next)=>{
    res.status(error.status || 500);
    res.json({
        error:{
            message: error.message
        }
    });
});
module.exports = app;

Edit: Inne odpowiedzi typu GET itd też nie działają dając tę samą odpowiedź. Literówka

0

W Express nie powinieneś używać res.end() ?

0

Żeby wysłać response musisz użyć res.send() lub res.json().

0

W którym miejscu? Używam res.status.json

0

SSL certificate daj na off

0

Nic nie dało.

0

Ok, naprawione. Musiałem w middlewarze dodać next() i jest już wszystko ok

app.use((req,res,next)=>{
    res.header('Access-Control-Allow-Origin', "*");
    res.header('Access-Control-Allow-Headers',
    'Origin,X-Requested-With, Content-Type, Accept, Authorization');
    if(req.method === 'OPTIONS'){
        res.header('Access-Control-Allow-Methods', 'PUT, POST, PATCH, DELETE, GET');
        return res.status(200).json({});
    }
    next();
});

1 użytkowników online, w tym zalogowanych: 0, gości: 1