In my application, i am passing the request param id in router.delete and communicating that with vuex service. While triggering action api is fired but getting 404 not found and there is not request payload as well.
Express route.delete
JavaScript
x
4
1
router.delete('/favorites/:favoriteId', (req, res) => {
2
res.status(200).send(Number(req.params.favoriteId));
3
});
4
Vuex service
JavaScript
1
10
10
1
/**
2
*
3
* @param {*} favouriteId number
4
*/
5
6
export async function deleteUserFavourites(favouriteId) {
7
const response = await http.delete('favorites',favouriteId);
8
return response;
9
}
10
vuex actions
JavaScript
1
7
1
async removeFavorites({ commit }, payload) {
2
const favourites = await service.deleteUserFavourites({
3
id: payload.favouriteId
4
});
5
commit('removeFavorites', favourites);
6
},
7
component action trigger
JavaScript
1
8
1
async handleListClick(item) {
2
console.log(item.id);
3
await this.removeFavorites({
4
id: item.id
5
});
6
}
7
}
8
It is showing in api response
server.js
JavaScript
1
51
51
1
const path = require('path');
2
const fs = require('fs');
3
const express = require('express');
4
const webpack = require('webpack');
5
6
// Express Server Setup
7
const server = express();
8
server.use(express.json());
9
server.use(express.urlencoded({ extended: true }));
10
server.use(express.static('public'));
11
12
// Webpack HMR
13
const webpackConfig = require('./webpack.config.local');
14
const compiler = webpack(webpackConfig);
15
const webpackDevMiddleware = require('webpack-dev-middleware')(
16
compiler,
17
webpackConfig.devServer
18
);
19
const webpackHotMiddleware = require('webpack-hot-middleware')(compiler);
20
server.use(webpackDevMiddleware);
21
server.use(webpackHotMiddleware);
22
23
// Server Startup
24
server.listen(3000, () => {
25
console.log('*****************************************');
26
console.log('*****************************************');
27
console.log('** Server is listening at PORT 3000. ****');
28
console.log('** http://localhost:3000/ ****');
29
console.log('*****************************************');
30
console.log('*****************************************');
31
});
32
33
// Mock APIs
34
const router = require('express').Router();
35
const routesPath = path.join(__dirname, './routes');
36
const filenames = fs.readdirSync(routesPath);
37
filenames.forEach(file => {
38
if (file.endsWith('.js')) {
39
console.log(`route ${file} loaded`);
40
router.use('/', require(path.join(routesPath, file)));
41
}
42
});
43
server.use('/api', router);
44
45
// Vue entrypoint
46
const template = require('./template');
47
server.get('/**', (req, res) => {
48
const page = template();
49
res.header('Content-Type', 'text/html').send(page);
50
});
51
Advertisement
Answer
Since your api endpoint is this: '/favorites/:favoriteId'
, You have to app favoriteId at the end of the request url not in the body.
so your request have to be like this:
JavaScript
1
4
1
export async function deleteUserFavourites(favouriteId) {
2
const response = await http.delete('favorites/' + favoriteId.toString());
3
return response;
4
}