javascript - 使用 angularJS 不会删除 mongodb 中的数据

标签 javascript angularjs mongodb

服务器端代码:

var User = require("./models/user");
var express = require('express'),
app = express(),
Account = require("./models/account"),
mongoose = require('mongoose'),
passport = require("passport"),
basicAuth = require('basic-auth'),
bodyParser = require("body-parser"),

LocalStrategy = require("passport-local"),
passportLocalMongoose = require("passport-local-mongoose");  //libraries


mongoose.connect("mongodb://localhost/test");
app.set('view engine', 'ejs'); //using engine of ejs file
app.use(bodyParser.urlencoded({extended: true}));
app.use(require("express-session")({
secret: "kiss my ass",
resave: false,
saveUninitialized: false
}));

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

passport.use(new LocalStrategy(Account.authenticate()));
passport.serializeUser(Account.serializeUser());
passport.deserializeUser(Account.deserializeUser());


// AUTH Routes


//create account success
app.get('/success', function (req, res) {
  res.render('success');
});

// deleteUser form
app.get("/delete", function(req, res, next) {
   res.render("deleteuser"); 
});



app.get("/viewall", function(req, res, next) {
   res.render("viewall"); 
});

//view all User form
app.get('/view', function (req, res) {

console.log('getting all user');
Account.find({})
.exec(function(err, results) {
if(err) {
    res.send('error has occured');
}else{

    console.log(results);
    res.json(results);
}
});
});

app.get('/viewall/:id', function (req, res) {

console.log('getting one user');
Account.findOne({
    _id:req.params.id
})
.exec(function(err, account) {
if(err) {
    res.send('error occured');
}else{
    console.log(account);
    res.json(account);
}
})
})

// LOGIN for user
// render login form
app.get("/", function(req, res) {
res.render("login"); 
});

//login for user
//middleware
 app.post("/login", passport.authenticate("local", {
successRedirect: "http://localhost:8082/viewImage.html",
failureRedirect: "http://localhost:8081/error" 
}), function(req, res) {

});

//logout from basicauth
app.get('/logout', function (req, res) {
 res.set('WWW-Authenticate', 'Basic realm=Authenticate Required');
 return res.sendStatus(401);
// res.send("<a href='/login'>Show Users</a>");
});

//basicauth for admin login

var auth = function (req, res, next) {
  function unauthorized(res) {
    res.set('WWW-Authenticate', 'Basic realm=Authenticate Required');
    return res.send(401);
  };

  var user = basicAuth(req);

  if (!user || !user.name || !user.pass) {
    return unauthorized(res);
  };

  if (user.name === 'admin' && user.pass === 'admin123') {
    return next();
  } else {
    return unauthorized(res);
  };
 };
//LOGIN for admin
//render login form
app.get("/register", auth, function(req, res) {
 res.render("register"); 


});

// register post
app.post("/register", function(req,res){
Account.register(new Account({username: req.body.username}),  req.body.password, function(err, user){
    if(err){
        console.log(err);

        return res.render('/register');
    }
    passport.authenticate("local")(req, res, function(){
       res.redirect("/success"); 
    });
});
});

app.listen(8081, function () {
console.log('ImageViewer listening on port 8081!');
});

JS代码:

$scope.delete = function (data) {
      if (confirm('Do you really want to delete?')){
      $window.location.reload();

        $http['delete']('/viewall/' + data._id).success(function() {
          $scope.users.splice($scope.users.indexOf(data), 1);

        });
      }
    };

html代码:

<tr ng-repeat="user in users | filter:searchBox | orderBy:'+username'">            
     <td>{{user._id}}</td>
        <td>{{user.username}}</td>
        <td><button class="btn btn-primary" ng-click="delete(user)">Delete</button></td>

这是我得到的错误:

DELETE 
XHR 
http://localhost:8081/viewall/5784919136ccb93d0ba78d4b [HTTP/1.1 404 Not  Found 8ms]

但是当我运行 http://localhost:8081/viewall/5784919136ccb93d0ba78d4b 的网址时它确实给了我数据:

{"_id":"5784919136ccb93d0ba78d4b","username":"qs","__v":0}

有人可以帮助我吗?当我能够获取数据时,不知道 error404 是怎么回事。

最佳答案

您没有使用 DELETE 动词的 '/viewall/:id' 路由。因此,您应该使用 DELETE 动词添加路由。喜欢

app.delete('/viewall/:id',function(req,res){
  // rest of code here
  // assume your model name Account
  Account.remove({ _id: req.params.id },function(err,doc) {
      if(err) {
         return res.status(400).send({msg: 'Error occurred during delete account'});
      }
      return res.status(200).send({msg: 'Successfully deleted'});
  });
}

并且您应该在 Angular Controller 成功后重新加载。喜欢

$http['delete']('/viewall/' + data._id).then(function(response) {
  $scope.users.splice($scope.users.indexOf(data), 1);
  $window.location.reload();
});

关于javascript - 使用 angularJS 不会删除 mongodb 中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38321926/

相关文章:

javascript - 谷歌图表图表区域不透明度?

mongodb - MongoDB 中的嵌套文档值搜索

javascript - 如何使用 JavaScript 或 JQuery 获取以像素为单位的默认字体大小?

angularjs - 如何将 MongoDB 中保存的客户端日期保留为日期?

angularjs - 在angular js中显示两个数组的交集

angularjs - Ng-bootstrap 导入错误 Angular 2

java - mongodb - 如何使用 mongodb java 客户端锁定集合

MongoDb区域副本集 - 每个区域的主节点?

javascript - 如何对用户以 html 表单输入的数据应用 stringify?

带有 requestAnimationFrame 的 Javascript Canvas 动画通过路径更改变得更快