首页 > 解决方案 > 使用 Ajax、Node 和 Express 删除帖子。如何使用 Ajax 删除帖子

问题描述

我正在尝试使用 Ajax、Node 和 Express 删除我的博文,但由于未知原因,它无法正常工作。当我将所有代码都放在 index.js 文件中时,它最初是有效的。但是在将它们分成模型和路线之后,它突然停止寻找路线或任何可能的问题。

我的 app.js 文件中有这些

if (process.env.NODE_ENV !==  'production') {
    const dotenv = require('dotenv').config();
 }

 var createError = require('http-errors');
 var express = require('express');
 var expressLayouts = require('express-ejs-layouts');
 var path = require('path');
 var cookieParser = require('cookie-parser');
 var logger = require('morgan');
 var session = require('express-session');
 var passport = require('passport');
 var expressValidator = require('express-validator');
 const check = require('express-validator/check').check;
 const validationResult = require('express- 
 validator/check').validationResult;
 var LocalStrategy = require('passport-local').Strategy;
 var multer = require('multer');
 // handle file uploads
 var upload = multer({dest: './uploads'});
 var flash = require('connect-flash');
 var bcrypt = require('bcryptjs');
 const methodOverride = require('method-override');
 var mongoose = require('mongoose');



 var indexRouter = require('./routes/index');
 var postRouter = require('./routes/posts');
 var commentRouter = require('./routes/comments');
 var usersRouter = require('./routes/users');

 mongoose.connect(process.env.DATABASE_URL, {
   useNewUrlParser: true,
   useUnifiedTopology: true
 });
const db = mongoose.connection
db.on('error', error => console.log(error)) 
db.once('open', () => console.log('connectd to Mongoose'))


var app = express();
app.use(require('connect-flash')());
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
app.use(expressLayouts);

app.use(express.static('./uploads'));
app.use(flash());




app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static('public'))
// app.use(express.static(path.join(__dirname, 'public')));

// Handle Session
app.use(session({
  secret:'secrect',
  saveUninitialized: true,
  resave: true
}));

//Passport
app.use(passport.initialize());
app.use(passport.session());

//Validator 

app.use(expressValidator({
  errorFormatter: function(param, msg, value){
    var namespace = param.split('.')
    , root = namespace.shift()
    , formParam = root;

    while(namespace.length) {
        formParam += '[' + namespace.shift()
    }
    return{
        param: formParam,
        msg: msg,
        value: value
    };
   }
 }));


app.use(function (req, res, next) {
   res.locals.messages = require('express-messages')(req, res);
  next();
});

app.get('*', function(req, res, next) {
  res.locals.user = req.user  || null;
  next();
});


app.use(methodOverride('_method'));
app.use('/', indexRouter);
app.use('/users', usersRouter);
app.use('/posts', postRouter);
app.use('', commentRouter);
// catch 404 and forward to error handler
app.use(function(req, res, next) {
   next(createError(404));
});

// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : 
  {};

   // render the error page
  res.status(err.status || 500);
  res.render('error');
});

module.exports = app;

这是我的routes/posts.js文件

router.delete( '/:id', function( req, res ){
  const ObjectId = mongoose.Types.ObjectId;

  let query = {_id:new ObjectId(req.params.id)}

  Post.deleteOne(query, function(err) {
   if(err){
     console.log(err);
   }
   res.send('Success');
 });
})

我的main.js档案

$(document).ready(function() {
$('.delete-article').on('click', function(e) {
   const $target = $(e.target);
    const id = $target.attr('data-id');
    $.ajax({
        type: 'DELETE',
        url: '/posts/'+id,
        success: function(response) {
            window.location.href='/posts';
        },
        error: function(err){
           console.log(err);
        }
    });
 }); 
});

这是我的链接

<li><a class="delete-article" href="#" data-id="<%=post.id%>">Delete</a></li>

这是我从浏览器控制台收到的错误消息

DELETE http://localhost:3000/posts/5e851f8fbdfbfa6b3c140e52 404 (Not Found)

网络代码

Status Code: 404 Not Found

我没有很好的 Node 和 Ajax 知识,如果有人可以帮助我并更好地解释它以便我理解,我将非常感激。谢谢。

标签: node.jsajaxexpress

解决方案


推荐阅读