当我点击注册路由时,“ req.body”不会获取任何POST值,但是只要在Postman上使用主体原始方法测试了相同的代码,就会显示这些值。
const router = require('express').Router();
const bodyParser = require('body-parser');
const Promise = require('bluebird');
router.use(bodyParser.json());
router.use(bodyParser.urlencoded({
extended: true
}));
const registration = require('./services/registration');
router.get('/', (req, res, next) => {
res.send('Admin Welcome');
});
router.get('/signup', (req, res, next) => {
res.render('user/signup');
});
router.post('/signup', (req, res, next) => {
res.send(req.body);
registration.registration(req.body);
.then(ok=>{
res.redirect('signin')
})
.catch(err => {
res.render('error', {message: err})
})
})
router.get('/signin', (req, res, next) => {
res.render('user/signin');
});
答案 0 :(得分:0)
router.post("/signup", (req, res, next) => {
res.send(req.body);
registration
.registration(req.body)
.then(ok => {
res.redirect("signin");
})
.catch(err => {
res.render("error", { message: err });
});
});
res
对象表示Express应用在收到HTTP请求时发送的HTTP响应。在下面的链接中,您可以看到res
对象公开的所有方法:
https://expressjs.com/en/api.html#res
您在路由处理程序开始时使用的方法是:
res.send([body])
并且可以从文档中读取它,因此它发送HTTP响应。现在,您只能发送一次该响应,否则会出现错误:
Error : Cannot set headers after they are sent to the client
您要在处理程序中执行的操作是,将结果重定向到“登录”页面,然后已经使用res.send(req.body)
发送了响应。
以这个假路线为例:
router.post("/example", (req, res, next) => {
res.send('1');
res.send('2');
res.send('3');
});
与您可能相信的相反,它不会返回值(1,2,3),但实际上会返回值1以及先前描述的加和错误。
最后要解决您的问题,您需要删除包含res.send(req.body)
的行,并仔细检查registration.registration
服务是否正确处理了提供的数据,在这种情况下为req.body
。