在一个MERN应用程序上工作,作为学习它是如何工作的一种方式,但我一直在试图让我的路由显示。我不会得到任何其他的错误,如果我用一个简单的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路由。
标题错误:
Cannot GET /api/items
表示它是对/api/items
的GET请求。但是,你没有那个路由的GET处理程序。对于该路由,您只有一个POST处理程序,该处理程序由以下两行代码定义:
router.post('/', upload.single('icon'), items.create);
app.use('/api/items', router);
因此,您显然需要将该路由上的测试更改为POST,而不是GET,并且POST将期望body部分包含其中的图标数据。
如果你想确切地看到什么到达了你的路由器(为了调试/排除故障的目的),你可以在你声明路由器作为你在路由器上注册的第一项后添加这个。
router.use((req, res, next) => {
console.log(`In router: ${req.method}:${req.originalUrl}`);
next();
});