پیش به سوی تابستان؛ با تخفیفهای داغ راکت!
بزن بریم!با سلام
من وقتی در کد زیر میخواهم 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
});
});
});
}
}
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟