在我的MERN应用程序上,我有两条路线。一个用于“存储数据”,我们称其为“数据”路由,另一个用于“注册用户”,因此称其为“注册”路由。
在向“数据”路由发送请求时,客户端可能会发送“用户名,密码和名称”,因为这是可选的。
现在,如果客户端确实发送了“用户名,密码和名称”。如何将那些数据从“数据”路由重定向到“注册”路由,然后将响应返回到“数据”路由,然后将数据存储到数据库?
分别,两条路线都在工作。我只是不知道如何将某些数据传输到另一条路由。
这是数据路由文件:
router.post('/', async (req, res) => {
const { data, email, password, name } = req.body;
if(email && password && name) {
// Register User here
}
// code to store data to database will go here
});
module.exports = router;
这是注册路由文件:
router.post('/', async (req, res) => {
const { email, password, name } = req.body;
try {
let user = await User.findOne({ email });
if (user) {
return res.status(400).json({ msg: 'User already exists' });
}
user = new User({
name,
email,
password,
});
const salt = await bcrypt.genSalt(10);
user.password = await bcrypt.hash(password, salt);
await user.save();
} catch (err) {
console.error(err.message);
res.status(500).json('Server Error');
}
});
module.exports = router;
答案 0 :(得分:0)
您可以将控制器链接在一起,就像使用中间件一样。每个控制器使用3个参数调用:请求响应和下一个;调用next调用链中的下一个控制器。请注意,设置响应(例如res.send()
)并调用next将导致错误,因此仅设置响应一次。
router
.route('/')
.post(
function register(req, res, next){
if(!/* my completeness check */){
return next()
} else {
res.send('done!')
}
},
function store(req, res){
})