यह सब कैसे काम करता है, यह जानने के लिए एक एमईआरएन एप्लिकेशन पर काम करना, लेकिन मैं अपने मार्गों को प्रदर्शित करने की कोशिश कर रहा हूं। मुझे कोई अन्य त्रुटि नहीं मिलती है, और यदि मैं एक साधारण app.get('/') का उपयोग करता हूं, तो मैं इसे ठीक देख सकता हूं; ऐसा लगता है कि जिन मार्गों को मैंने परिभाषित किया है, वे किसी कारण से पहचाने नहीं जा रहे हैं।

require('dotenv').config();

const express = require('express');
const cors = require('cors');

const app = express();
const port = process.env.PORT;

const options = {
    origin: 'http://localhost:8081'
}

app.use(cors(options));
app.use(express.json());
app.use(express.urlencoded({ extended: true }));

const db = require('./models');
db.mongoose
    .connect(db.url, {
        useNewUrlParser: true,
        useUnifiedTopology: true,
    })
    .then(() => {
        console.log('Successfully connected.');
    })
    .catch((error) =>{
        console.log(`Connection failed. Error: ${error}`);
        process.exit();
    }
);

require('./routes/items.routes')(app)

app.listen(port, () => {
    console.log(`Listening at localhost:${port}`);
});
const multer = require('multer');
const dir = './public/';

const storage = multer.diskStorage({
    destination: (req, file, cb) => {
        cb(null, dir);
    },
    filename: (req, file, cb) => {
        const fileName = file.originalname.toLowerCase().split(' ').join('-');
        cb(null, fileName + '-' + Date.now());
    }
});

var upload = multer({
    storage: storage,
    fileFilter: (req, file, cb) => {
        if (file.mimetype == 'image/png' || file.mimetype == 'image/jpg' || file.mimetype == 'image/jpeg') {
            cb(null, true);
        } else {
            cb(null, false);
            return cb(new Error('Invalid file type.'));
        }
    }
});

module.exports = app => {
    const items = require('../controllers/items.controller');

    let router = require('express').Router();

    router.post('/', upload.single('icon'), items.create);
    router.delete('/:id', items.delete);

    app.use('/api/items', router);
};

मैंने इस और यह एक शुरुआती बिंदु के रूप में। सुनिश्चित नहीं है कि मैं क्या खो रहा हूँ या यह मेरे POST मार्ग को पुनः प्राप्त करने में असमर्थ क्यों है।

0
waifuxszn 30 अक्टूबर 2021, 23:14
1
आप अपने पोस्ट रूट का परीक्षण कैसे कर रहे हैं?
 – 
David Harvey
31 अक्टूबर 2021, 00:17
मुझे नहीं लगता कि मुझे पता है कि इसका परीक्षण कैसे किया जाता है? मुझे यह कैसे करना है?
 – 
waifuxszn
31 अक्टूबर 2021, 04:14
कोई बात नहीं, मैंने इसका हल निकाल लिया।
 – 
waifuxszn
31 अक्टूबर 2021, 04:42

1 उत्तर

सबसे बढ़िया उत्तर

आपके शीर्षक में त्रुटि:

Cannot GET /api/items

इसका मतलब है कि यह /api/items के लिए एक GET अनुरोध है। लेकिन, आपके पास उस मार्ग के लिए GET हैंडलर नहीं है। कोड की इन दो पंक्तियों के साथ परिभाषित उस मार्ग के लिए आपके पास केवल एक POST हैंडलर है:

router.post('/', upload.single('icon'), items.create);
app.use('/api/items', router);

तो, आपको स्पष्ट रूप से उस मार्ग पर अपने परीक्षण को POST में बदलने की आवश्यकता है, न कि GET और POST में एक आइकन के लिए डेटा के साथ एक बॉडी पार्ट की अपेक्षा होगी।


यदि आप यह देखना चाहते हैं कि आपके राउटर को क्या मिल रहा है (डिबगिंग/समस्या निवारण उद्देश्यों के लिए), तो आप राउटर को राउटर पर पंजीकृत पहला आइटम घोषित करने के बाद इसे जोड़ सकते हैं।

router.use((req, res, next) => {
    console.log(`In router: ${req.method}:${req.originalUrl}`);
    next();
});
1
jfriend00 31 अक्टूबर 2021, 00:35
मैंने एक GET जोड़ा और अब मुझे यह त्रुटि आ रही है: TypeError: Cannot read property 'find' of undefined Item.find().then(data => {... पर। मुझे लगता है कि ऐसा इसलिए है क्योंकि मेरे पास अभी भी मेरे एपीआई में कोई डेटा नहीं डाला गया है, लेकिन अगर मैं पेज को कुछ भी प्रदर्शित करने के लिए भी नहीं प्राप्त कर सकता तो मैं किसी भी जानकारी को कैसे पोस्ट कर पाऊंगा? मुझे नहीं लगता कि मैं समझता हूं।
 – 
waifuxszn
31 अक्टूबर 2021, 04:06
- वह त्रुटि लगता है जैसे आइटम परिभाषित नहीं है। आप उस कोड को नहीं दिखाते हैं, इतना अधिक नहीं हम पेशकश कर सकते हैं
 – 
jfriend00
31 अक्टूबर 2021, 04:35
अच्छी खबर, पता चला कि त्रुटि का अपरिभाषित भाग मेरे द्वारा गलत तरीके से अपना मॉडल आयात करने के कारण था। ऐसा लगता है कि काम कर रहा है, लेकिन मुझे पूछना है, क्योंकि मैंने इस समय बैकएंड के लिए कोई फ्रंट-एंड फ्रेमवर्क नहीं जोड़ा है, और मेरा जीईटी और पोस्ट एक ही रास्ते पर हैं, मुझे किसी भी प्रकार का फॉर्म नहीं देखना चाहिए या डेटा भरने के लिए कुछ भी, सही? साथ ही, उत्तर देने के लिए समय निकालने के लिए धन्यवाद! मैं इसकी सराहना करता हूं।
 – 
waifuxszn
31 अक्टूबर 2021, 04:42