繁体   English   中英

PUT和DELETE始终在Node + Express中路由到GET

[英]PUT and DELETE always route to GET in Node + Express

我是Node / Express的初学者。 我试图制作一个CRUD应用程序,但停留在更新和删除上。 我认为我的路由器代码有问题,但我不知道为什么。 下面的代码在我的控制器中,除了PUTDELETE ,其他所有东西都可以工作。 它总是路由到GET 我试图使用next(); 但会返回此错误: Can't set headers after they are sent.

我可以使用GET /:company_id/delete使删除工作正常,但这不是一个好的标准化解决方案。 如何获得更新和删除过程的工作?

'use strict';

var Companies = require('../../models/companies');

module.exports = function (router) {

  // INDEX
  // accessed at GET http://localhost:8000/companies
  router.get('/', function (req, res) {

    Companies.find(function(err, model) {

      if (err) {
        res.send(err);
      }
      else {
        res.format({
          json: function () {
            res.json(model);
          },
          html: function () {
            res.render('companies/index', model);
          }
        });
      }

    });

  });

  // CREATE VIEW
  // accessed at GET http://localhost:8000/companies/create
  router.get('/create', function (req, res) {

      res.render('companies/create');

  });

  // CREATE DATA
  // accessed at POST http://localhost:8000/companies
  router.post('/', function (req, res) {

    var name = req.body.name && req.body.name.trim();
    var type = req.body.type && req.body.type.trim();

    // VALIDATION
    if (name === '') {
      res.redirect('/companies/create');
      return;
    }

    var model = new Companies({name: name, type: type});

    model.save(function(err) {
      if (err) {
        res.send(err);
      }
      else {
        res.redirect('/companies');
      }
    });

  });

  // READ
  // accessed at GET http://localhost:8000/companies/:company_id
  router.get('/:company_id', function(req, res) {

    Companies.findById(req.params.company_id, function(err, model) {

      if (err) {
        res.send(err);
      }
      else {
        res.render('companies/read', model);
      }

    });

  });

  // UPDATE VIEW
  // accessed at GET http://localhost:8000/companies/:company_id/edit
  router.get('/:company_id/edit', function(req, res) {

    Companies.findById(req.params.company_id, function(err, model) {

      if (err) {
        res.send(err);
      }
      else {
        res.render('companies/edit', model);
      }

    });

  });

  // UPDATE DATA
  // accessed at PUT http://localhost:8000/companies/:company_id
  router.put('/:company_id', function(req, res) {

    Companies.findById(req.params.company_id, function(err, model) {

      if (err) {
        res.send(err);
      }
      else {
        model.name = req.body.name;
        model.type = req.body.type;

        model.save(function(err) {
          if (err) {
            res.send(err);
          }
          else {
            res.redirect('/companies');
          }
        });

      }
    });

  });

  // DELETE
  // accessed at DELETE http://localhost:8000/companies/:company_id
  router.delete('/:company_id', function (req, res) {

    Companies.remove({ _id: req.params.company_id }, function(err) {

      if (err) {
        res.send(err);
      }
      else {
        res.redirect('/companies');
      }

    });

  });

};

HTML表单仅支持GETPOST XMLHTTPRequest支持PUTDELETE ,因此您可能必须走这种路线,或者使用诸如method-override之类的方法来允许HTML表单使用其他HTTP动词提交。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM