- 36
- 0
在express开发中,经常性碰到个问题:
User.findOne({
userName: userName
}, function (userErr, userDoc) {
if (userErr) {
return res.json({
status: '0',
msg: userErr.message,
result: '查无此人,可以注册'
})
} else {
return res.json({
status: '1',
msg: '查有此人,不可注册',
result: 'user-error'
})
}
})
它老是报这个错误:
Error: Can't set headers after they are sent.
请问这要如何解决?加return都不行?要怎么操作才行的...
补充:这个接口的完整代码:
router.post('/register', function (req, res, next) {
console.log(req.body);
if (req.body) {
//时间函数
function CurrentTime() {
var now = new Date();
var year = now.getFullYear(); //年
var month = now.getMonth() + 1; //月
var day = now.getDate(); //日
var hh = now.getHours(); //时
var mm = now.getMinutes(); //分
var clock = year + "-";
// var clock = '';
if (month < 10)
clock += "0";
clock += month + "-";
if (day < 10)
clock += "0";
clock += day + " ";
if (hh < 10)
clock += "0";
clock += hh + ":";
if (mm < 10) clock += '0';
clock += mm;
return (clock);
};
//验证用户名是否存在
let userName = req.body.name;
User.findOne({
userName: userName
}, function (userErr, userDoc) {
console.log("userDoc err")
if (userErr) {
console.log("无此用户:"+userName);
} else {
res.json({
status: '1',
msg: '查有此人,不可注册',
result: 'user-error'
})
return false;
}
})
//验证两次密码是否相同并加密密码
let userPassword = req.body.pass;
let userCheckPassword = req.body.checkPass;
if (userPassword == userCheckPassword) {
//生成口令的散列值
let md5 = crypto.createHash('md5'); //crypto模块功能是加密并生成各种散列,此处所示为MD5方式加密
let password = md5.update(userPassword).digest('hex'); //加密后的密码
} else {
console.log("password err")
res.json({
status: '0',
msg: '密码不一致!',
result: 'password-error'
});
return false;
}
console.log(password);
let param = {
userCreatetime: CurrentTime(),
userName: userName,
userPassword: password,
userHostelArea: req.body.hostelArea,
userHostelAddress: req.body.hostelAddress,
userSex: req.body.sex,
userQQ: req.body.qq,
userState: "1"
};
User.create(param);
res.json({
status: "1",
msg: '创建用户成功!',
result: 'success'
});
} else {
console.log("req.body error")
res.json({
status: '0',
msg: '拒绝空响!',
result: 'error'
})
return false;
}
})
返回的完整错误:
GET /users/setSessionStorage 304 8.845 ms - -
GET /hostels 304 41.645 ms - -
{ name: '剑寒秋',
pass: '123456',
checkPass: '123456',
hostelArea: '绿杨楼',
hostelAddress: 'R413',
sex: '男',
qq: '123456' }
POST /users/register 500 26.365 ms - 2258
Error: Failed to lookup view "error" in views directory "E:\毕业设计\ConvenientCampus\server\views"
at Function.render (E:\毕业设计\ConvenientCampus\node_modules\_express@4.15.5@express\lib\application.js:580:17)
at ServerResponse.render (E:\毕业设计\ConvenientCampus\node_modules\_express@4.15.5@express\lib\response.js:971:7)
at E:\毕业设计\ConvenientCampus\server\app.js:89:7
at Layer.handle_error (E:\毕业设计\ConvenientCampus\node_modules\_express@4.15.5@express\lib\router\layer.js:71:5)
at trim_prefix (E:\毕业设计\ConvenientCampus\node_modules\_express@4.15.5@express\lib\router\index.js:315:13)
at E:\毕业设计\ConvenientCampus\node_modules\_express@4.15.5@express\lib\router\index.js:284:7
at Function.process_params (E:\毕业设计\ConvenientCampus\node_modules\_express@4.15.5@express\lib\router\index.js:335:12)
at next (E:\毕业设计\ConvenientCampus\node_modules\_express@4.15.5@express\lib\router\index.js:275:10)
at Layer.handle_error (E:\毕业设计\ConvenientCampus\node_modules\_express@4.15.5@express\lib\router\layer.js:67:12)
at trim_prefix (E:\毕业设计\ConvenientCampus\node_modules\_express@4.15.5@express\lib\router\index.js:315:13)
at E:\毕业设计\ConvenientCampus\node_modules\_express@4.15.5@express\lib\router\index.js:284:7
at Function.process_params (E:\毕业设计\ConvenientCampus\node_modules\_express@4.15.5@express\lib\router\index.js:335:12)
at next (E:\毕业设计\ConvenientCampus\node_modules\_express@4.15.5@express\lib\router\index.js:275:10)
at E:\毕业设计\ConvenientCampus\node_modules\_express@4.15.5@express\lib\router\index.js:635:15
at next (E:\毕业设计\ConvenientCampus\node_modules\_express@4.15.5@express\lib\router\index.js:260:14)
at next (E:\毕业设计\ConvenientCampus\node_modules\_express@4.15.5@express\lib\router\route.js:127:14)
userDoc err
events.js:183
throw er; // Unhandled 'error' event
^
Error: Can't set headers after they are sent.
at validateHeader (_http_outgoing.js:494:11)
at ServerResponse.setHeader (_http_outgoing.js:501:3)
at ServerResponse.header (E:\毕业设计\ConvenientCampus\node_modules\_express@4.15.5@express\lib\response.js:730:10)
at ServerResponse.send (E:\毕业设计\ConvenientCampus\node_modules\_express@4.15.5@express\lib\response.js:170:12)
at ServerResponse.json (E:\毕业设计\ConvenientCampus\node_modules\_express@4.15.5@express\lib\response.js:256:15)
at E:\毕业设计\ConvenientCampus\server\routes\users.js:80:13
at E:\毕业设计\ConvenientCampus\node_modules\_mongoose@5.0.9@mongoose\lib\model.js:3930:16
at Immediate.<anonymous> (E:\毕业设计\ConvenientCampus\node_modules\_mongoose@5.0.9@mongoose\lib\query.js:1514:14)
at Immediate._onImmediate (E:\毕业设计\ConvenientCampus\node_modules\_mquery@3.0.0@mquery\lib\utils.js:119:16)
at runCallback (timers.js:789:20)
at tryOnImmediate (timers.js:751:5)
at processImmediate [as _immediateCallback] (timers.js:722:5) 0
打赏
收藏
点击回答
- 共 0 条
- 全部回答
-
╄→寒冷的冰 普通会员 1楼
在Express中,res.json是HTTP响应函数,它用于返回JSON格式的数据。以下是如何正确返回JSON格式数据的示例:
```javascript app.get('/api/users', (req, res) => { const users = [ { id: 1, name: 'John', age: 30 }, { id: 2, name: 'Jane', age: 25 }, { id: 3, name: 'Bob', age: 35 } ];
res.json(users); }); ```
在这个示例中,我们首先定义了一个数组users,其中包含了三个用户对象。然后,我们使用res.json()函数将数组转换为JSON格式的字符串,并将其返回给客户端。
注意,res.json()函数的第一个参数是JSON格式的数据,第二个参数是HTTP响应代码。如果省略了第二个参数,那么默认的HTTP响应代码是200,表示成功。
更多回答
网站公告
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
