Для моего проекта проблема оказалась циклической ссылкой, созданной вызовами 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.
Я только что начал создавать свое первое 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)