Nodejs 控制器返回承诺而不是布尔值
Nodejs controller returning promise instead of boolean
我正在调用控制器 return true 或 false
控制器不工作:
const jwt = require('jsonwebtoken');
class TokenController {
static async isValidToken(token) {
try {
jwt.verify(token, process.env.TOKEN_SECRET);
return true;
} catch {
return false;
}
}
}
module.exports = TokenController;
路由器:
const router = require('express').Router({ mergeParams: true });
const TokenController = require('../../controllers/token');
router.get('/', (req, res) => {
console.log(TokenController.isValidToken(req.cookies['auth-token']));
}
module.exports = router;
它 returning Promise { true }
或 Promise { false }
取决于控制器,但是当我在路由器中收到时,它 return 是一个承诺,但它应该 return 一个布尔值
工作控制器
const ScrumTask = require('../models/ScrumTask');
const User = require('../models/User');
class ScrumController {
static async getTask(id) {
console.log(id);
const taskData = await ScrumTask.findOne(
{ _id: id },
async (err, data) => {
if (!err) {
return data;
} else {
console.log('error');
res.status(400).send(err);
}
}
);
return taskData;
}
}
module.exports = ScrumController;
路由器调用我的工作控制器
const router = require('express').Router({ mergeParams: true });
const translate = require('../../../config/translate.json');
// Import Controllers
const TokenController = require('../../controllers/token');
const ScrumController = require('../../controllers/scrum');
router.get('/view_task/:id', async (req, res) => {
let id = req.params.id;
const taskData = await ScrumController.getTask(id);
}
module.exports = router;
如果你使用 async
那么你总是会得到 Promise
。
此外,我最好使用 Promise.resolve
到 return 同步结果(你的情况):
static async isValidToken(token) {
try {
jwt.verify(token, process.env.TOKEN_SECRET);
return Promise.resolve(true);
} catch {
return Promise.resolve(false);
}
}
或者如果所有 return 路径都是同步的,那么只需从函数定义中删除 async
。
我正在调用控制器 return true 或 false
控制器不工作:
const jwt = require('jsonwebtoken');
class TokenController {
static async isValidToken(token) {
try {
jwt.verify(token, process.env.TOKEN_SECRET);
return true;
} catch {
return false;
}
}
}
module.exports = TokenController;
路由器:
const router = require('express').Router({ mergeParams: true });
const TokenController = require('../../controllers/token');
router.get('/', (req, res) => {
console.log(TokenController.isValidToken(req.cookies['auth-token']));
}
module.exports = router;
它 returning Promise { true }
或 Promise { false }
取决于控制器,但是当我在路由器中收到时,它 return 是一个承诺,但它应该 return 一个布尔值
工作控制器
const ScrumTask = require('../models/ScrumTask');
const User = require('../models/User');
class ScrumController {
static async getTask(id) {
console.log(id);
const taskData = await ScrumTask.findOne(
{ _id: id },
async (err, data) => {
if (!err) {
return data;
} else {
console.log('error');
res.status(400).send(err);
}
}
);
return taskData;
}
}
module.exports = ScrumController;
路由器调用我的工作控制器
const router = require('express').Router({ mergeParams: true });
const translate = require('../../../config/translate.json');
// Import Controllers
const TokenController = require('../../controllers/token');
const ScrumController = require('../../controllers/scrum');
router.get('/view_task/:id', async (req, res) => {
let id = req.params.id;
const taskData = await ScrumController.getTask(id);
}
module.exports = router;
如果你使用 async
那么你总是会得到 Promise
。
此外,我最好使用 Promise.resolve
到 return 同步结果(你的情况):
static async isValidToken(token) {
try {
jwt.verify(token, process.env.TOKEN_SECRET);
return Promise.resolve(true);
} catch {
return Promise.resolve(false);
}
}
或者如果所有 return 路径都是同步的,那么只需从函数定义中删除 async
。