javascript - 使用 Express JS 阻止来自客户端的不需要的请求
问题描述
考虑 Express 路由器:
const express = require("express");
const router = express.Router();
const DUMMY_PLACES = [
{
id: "p1",
title: "Empire State Building",
description: "One of the most famous sky scrapers in the world!",
location: {
lat: 40.7484474,
lng: -73.9871516
},
address: "20 W 34th St, New York, NY 10001",
creator: "u1"
}
];
// @ http://localhost:5000/api/places/user/u1
router.get("/user/:uid", (req, res, next) => {
const user_id = req.params.uid;
const place = DUMMY_PLACES.find(p => {
return p.creator === user_id;
});
return res.status(200).json({
place
});
});
module.exports = router;
和服务器:
const express = require("express");
const bodyParser = require("body-parser");
const app = express();
const placesRoutes = require("./routes/places-routes");
app.use("/api/places", placesRoutes);
const PORT = 5000;
app.listen(PORT, () => {
console.log(`Listening on port ${PORT}`);
});
当客户点击请求http://localhost:5000/api/places/user/u1
时,他们会得到虚拟对象......但是当点击请求时
http://localhost:5000/api/places/user
...它产生一个空对象。
如何返回 NOT ALLOWED 之类的东西而不是空对象?
解决方案
也许您可以检查 user_id 是否存在,如果不存在则发送错误响应?
router.get('/user/:uid', (req, res, next) => {
const user_id = req.params.uid
if (!user_id) {
return res.status(400).json({
error: 'User ID required'
})
}
const place = DUMMY_PLACES.find((p) => {
return p.creator === user_id
})
return res.status(200).json({
place
})
})
推荐阅读
- kubernetes - 更新 kubernetes 部署将创建新的 pod
- session - 如何使用 Keycloak Spring Security 设置防止会话固定?
- javascript - 如何通过 AJAX 将数据放入第二个选择元素?
- nhibernate - Nhibernate事务已经提交成功,但是查询的结果还是未修改的值
- mysql - Docker 只启动临时 MySQL 服务器
- java - 使用 JPA 的 UUID 映射类型
- javascript - 如何显示 JSON 数据来自 NODEJS 中的 Multiple 文件
- reactjs - ReactJS 在简单的 JSX 文本上抛出异常
- c# - Activator.CreateInstance() 创建一个类型的实例但不影响引用
- c++ - 调试与发布