Node.js - Express 4.x - переопределение метода не обрабатывает запрос PUT

Для моего проекта проблема оказалась циклической ссылкой, созданной вызовами require ():

y.js:
var x = require("./x.js");
var y = function() { console.log("result is " + x(); }
module.exports = y;

x.js:
var y = require("./y.js");
var my_y = new y(); // <- TypeError: y is not a constructor
var x = function() { console.log("result is " + my_y; }
module.exports = x;

. Причина в том, что при попытке инициализировать y она создает временную Объект «y» (а не класс, объект!) в системе зависимостей, которая как-то еще не является конструктором. Затем, когда x.js закончена, она может продолжить создание y конструктора. Только в x.js есть ошибка в нем, где он пытается использовать неконструктор y.

16
задан flukyspore 3 June 2014 в 16:32
поделиться

1 ответ

Я только что начал создавать свое первое express проект и следующие работы кода. Приезжая из Laravel, я хотел, чтобы мои маршруты проверили на присутствие _method поле и определили соответствующий маршрут. Таким образом, я создал промежуточное программное обеспечение, чтобы сделать это.

import { RequestHandler } from "express";

// Updates the request method if there is a 
// "_method" field present in the request query or
// request body.
const methodOverride: RequestHandler = function (req, res, next) {

    // Set the request method to the "_method" value in query
    // or the request body. Perform a validation before setting the
    // request method.
    req.method = req.query._method || req.body._method || req.method;

    // Carry forward the request to next middleware
    return next();
};

export default methodOverride;

Использование это промежуточное программное обеспечение перед любым связанным с маршрутом промежуточным программным обеспечением. И теперь, мои формы могут быть похожими, это

<form action="/" method="post">
    <input type="text" name="first">
    <input type="text" name="last">
    <input type="hidden" name="_method" value="put">
    <button type="submit">Submit</button>
</form>

Эти router.put('/', handler) будет выполняться вместо router.post('/', handler)

0
ответ дан 30 November 2019 в 12:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: