node.js - 使用 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 知识,如果有人可以帮助我并更好地解释它以便我理解,我将非常感激。谢谢。
解决方案
推荐阅读
- vb.net - 如何更改datagridview最后一行的值
- amazon-web-services - AWS cloudformation 错误:模板验证错误:模板错误:资源 NotificationsTopic 不支持 Fn::GetAtt 中的属性类型 Arn
- swift - 尝试更改 UIStatusBar 色调颜色
- rest - 如何使用 REST 在 Magento 中获取所有订单?
- ios - 在 iOS 设备上获取 HTTPOnly Cookie
- javascript - 根据javascript中的单选按钮选择更改变量值
- ios - Xamarin 形式:jamesmontemagno/MediaPlugin:在 IOS 应用程序中添加到 UI 时,所选图片正在旋转
- ios - 我无法解决错误“编码分类不符合键值编码的键”
- mysql - 适当地存储图像
- c++ - 在 C++ 中评估块语句的结果