Node/express 后端在调用 API(MERN 堆栈)时崩溃
Node/express backend crashing when calling the API (MERN stack)
路由器:
router.route('/allmovies/:searchtext').get(moviesCtrl.getMovieBySearchText);
控制器:
const getMovieBySearchText = async (req, res) => {
const searchText = req.params.searchtext;
const searchedMovies = await Movies.find({ $text: { $search: searchText } }).limit(10).sort({ score: { $meta: "textScore" } });
if (!searchedMovies) return res.status(204).json({'message': 'No movie found.'});
res.json(searchedMovies);
}
当我从前端进行搜索时,它会将参数放入后端抓取的 URL 中。如果搜索为空,则会导致后端服务器崩溃。我可以通过为 '/allmovies/'
设置默认获取来颠覆这一点。我只是想更好地理解为什么会发生这种情况,或者是否有更好的方法来处理这种情况。我查看了快速验证器,但这只对发布数据有意义,对获取数据没有意义。是的,可以验证前端,但是有很多方法可以解决这个问题,而且服务器也不安全。
您不能在不传递其参数的情况下调用端点,我认为崩溃是因为如果您不传递 searchtext
将调用另一个端点。
我建议改用 query
:
/allmovies?searchtext=anything
而且最好使用 if
语句,如果 searchText
为空,运行 您的查询无需任何搜索。
路由器:
router.route('/allmovies/:searchtext').get(moviesCtrl.getMovieBySearchText);
控制器:
const getMovieBySearchText = async (req, res) => {
const searchText = req.params.searchtext;
const searchedMovies = await Movies.find({ $text: { $search: searchText } }).limit(10).sort({ score: { $meta: "textScore" } });
if (!searchedMovies) return res.status(204).json({'message': 'No movie found.'});
res.json(searchedMovies);
}
当我从前端进行搜索时,它会将参数放入后端抓取的 URL 中。如果搜索为空,则会导致后端服务器崩溃。我可以通过为 '/allmovies/'
设置默认获取来颠覆这一点。我只是想更好地理解为什么会发生这种情况,或者是否有更好的方法来处理这种情况。我查看了快速验证器,但这只对发布数据有意义,对获取数据没有意义。是的,可以验证前端,但是有很多方法可以解决这个问题,而且服务器也不安全。
您不能在不传递其参数的情况下调用端点,我认为崩溃是因为如果您不传递 searchtext
将调用另一个端点。
我建议改用 query
:
/allmovies?searchtext=anything
而且最好使用 if
语句,如果 searchText
为空,运行 您的查询无需任何搜索。