با سلام
من وقتی در کد زیر میخواهم response رو برگردونم ارور Can't set headers after they are sent. رو میده
کد:
const Controller = require('./../Controller');
const Project = require('./../../models/Project')
class RegisterController extends Controller {
store(req , res , next){
req.checkBody('project_id','Project ID is invalid').isMongoId();
req.checkBody('device_model','Device Model Can not be empty.').notEmpty();
req.checkBody('android_ver','Android version is invalid.').matches("^(*|[۱-۹]+(.[۰-۹]+){۰,۳})$");
req.checkBody('rooted').isBoolean();
req.checkBody('device_token','Device Token Can not be empty.').notEmpty();
req.checkBody('device_os','Device OS is invalid').isIn(['IOS','Andriod']);
if(this.showValidationErrors(req, res)) {
return;
}
Project.findById(req.body.project_id , (err , project)=>{
if(err) throw err;
if (!project) {
return res.json({error: 'project_id invalid.'});
}
});
let token = this.makeid(۳۰);
let newDevice = new this.model.Device({
project_id : req.body.project_id,
device_model : req.body.device_model,
android_ver : req.body.android_ver,
rooted : req.body.rooted,
device_token : req.body.device_token,
device_os : req.body.device_os,
api_token : token
}).save( (err) => {
if(err) throw err ;
return res.json({
api_token : token,
status : config.response.OK
});
});
}
}
module.exports = new RegisterController();
متن ارور:
events.js:۱۸۳
throw er; // Unhandled 'error' event
^
Error: Can't set headers after they are sent.
at validateHeader (_http_outgoing.js:۴۹۱:۱۱)
at ServerResponse.setHeader (_http_outgoing.js:۴۹۸:۳)
at ServerResponse.header (ode_modulesexpresslib esponse.js:۷۶۷:۱۰)
at ServerResponse.send (ode_modulesexpresslib esponse.js:۱۷۰:۱۲)
at ServerResponse.json (ode_modulesexpresslib esponse.js:۲۶۷:۱۵)
at newDevice.model.Device.save (modulescontrollersapiRegisterController.js:۴۱:۲۴)
at ode_modulesmongooselibmodel.js:۴۵۰۶:۱۶
at model.$__save.error (ode_modulesmongooselibmodel.js:۴۰۱:۷)
at ode_moduleskareemindex.js:۳۱۵:۲۱
at next (ode_moduleskareemindex.js:۲۰۹:۲۷)
at ode_moduleskareemindex.js:۱۸۲:۹
at process.nextTick (ode_moduleskareemindex.js:۴۵۲:۳۸)
at _combinedTickCallback (internal/process/next_tick.js:۱۳۲:۷)
at process._tickCallback (internal/process/next_tick.js:۱۸۱:۹)
ارور در وقتی کد زیر رو اضافه کردم وجود اومد:
> if (!project) {
> return res.json({error: 'project_id invalid.'});
> }
> });
لطفا راهنمایی کنید
باتشکر
سلام به دلیل اینکه این رویه اجرای کد شما اشتباهه و اشتباهه !
شما مگه یادنگرفتی که داستان Async در جاوااسکریپت به چه معناست ؟
کد شما به این شکل باید باشه
const Controller = require('./../Controller');
const Project = require('./../../models/Project')
class RegisterController extends Controller {
store(req , res , next){
req.checkBody('project_id','Project ID is invalid').isMongoId();
req.checkBody('device_model','Device Model Can not be empty.').notEmpty();
req.checkBody('android_ver','Android version is invalid.').matches("^(\\*|[1-9]+(\\.[0-9]+){0,3})$");
req.checkBody('rooted').isBoolean();
req.checkBody('device_token','Device Token Can not be empty.').notEmpty();
req.checkBody('device_os','Device OS is invalid').isIn(['IOS','Andriod']);
if(this.showValidationErrors(req, res)) {
return;
}
Project.findById(req.body.project_id , (err , project)=>{
if(err) throw err;
if (!project) {
return res.json({error: 'project_id invalid.'});
}
let token = this.makeid(30);
let newDevice = new this.model.Device({
project_id : req.body.project_id,
device_model : req.body.device_model,
android_ver : req.body.android_ver,
rooted : req.body.rooted,
device_token : req.body.device_token,
device_os : req.body.device_os,
api_token : token
}).save( (err) => {
if(err) throw err ;
return res.json({
api_token : token,
status : config.response.OK
});
});
});
}
}
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟