admin管理员组

文章数量:1318563

I want to show message after deleting user but I don't know how to do it. I tried to create req.session properties and then use them but they are not available in GET route. Do you know how to fix this code?

router.get("/", mid.isExpired, mid.isLoggedIn, mid.isAdmin, (req, res) => {
  let currentMessage = req.session.message;
  let currentState = req.session.state;
  req.session.message = undefined;
  req.session.state = undefined;
  console.log(currentState, currentMessage); //undefined
  user.getAll()
    .then(result => {
      res.render("users", {
        name: req.user,
        users: result,
        msg: currentMessage,
        state: currentState
      })
    })
});


// delete route

router.delete("/delete/:id", mid.isExpired, mid.isLoggedIn, mid.isAdmin, (req, res) => {
  user.del(req.params.id)
    .then(() => {
      req.session.message = "Some message!"
      req.session.state = true;
    })
});

// jquery 

function ajaxDelete(ev, url) {
  ev.preventDefault();
  $.ajax({
    url: url,
    type: "DELETE"
  });
}

delBtn.click(function(e) {
  var user = $(this).data("user");
  ajaxDelete(e, "/users/delete/" + user);
  window.location.href = "/users";
})

I want to show message after deleting user but I don't know how to do it. I tried to create req.session properties and then use them but they are not available in GET route. Do you know how to fix this code?

router.get("/", mid.isExpired, mid.isLoggedIn, mid.isAdmin, (req, res) => {
  let currentMessage = req.session.message;
  let currentState = req.session.state;
  req.session.message = undefined;
  req.session.state = undefined;
  console.log(currentState, currentMessage); //undefined
  user.getAll()
    .then(result => {
      res.render("users", {
        name: req.user,
        users: result,
        msg: currentMessage,
        state: currentState
      })
    })
});


// delete route

router.delete("/delete/:id", mid.isExpired, mid.isLoggedIn, mid.isAdmin, (req, res) => {
  user.del(req.params.id)
    .then(() => {
      req.session.message = "Some message!"
      req.session.state = true;
    })
});

// jquery 

function ajaxDelete(ev, url) {
  ev.preventDefault();
  $.ajax({
    url: url,
    type: "DELETE"
  });
}

delBtn.click(function(e) {
  var user = $(this).data("user");
  ajaxDelete(e, "/users/delete/" + user);
  window.location.href = "/users";
})

Share Improve this question asked Jan 23, 2018 at 7:24 MiqezMiqez 1731 gold badge2 silver badges16 bronze badges
Add a ment  | 

3 Answers 3

Reset to default 2

Use res parameter, and make a variable called message

const message= 'MyMessage';

then

res.json ({message}) // es6 feature

output

{"message":"myMessage"}

In your scenario, as far as I understand you want to send the JSON in response. You can use this code

router.delete("/delete/:id", mid.isExpired, mid.isLoggedIn, mid.isAdmin, (req, res) => {
  user.del(req.params.id)
    .then(() => {
      var response = { message : "Some message!",
                       state   : true };
      return res.json(response);
    })
});

the keyword 'return' is as per your requirement

router and session are middleware to any nodeJs App,If the router is added before session like this:

app.use(router)
app.use(session(...));

Then the session middleware won't get called for any requests that get handled by router. Hence change the order of adding router and session middleware,like this

app.use(session(...));
app.use(router)

本文标签: javascriptHow to send message in DELETE routeexpressjsStack Overflow