我创建了这个api,该api生成了两个用户(类似于linkedin或任何其他社交媒体)之间的连接请求
/**
* sendRequest
* * Send request to a user
* TODO: Testing required
* @param {string} from username of request send from
* @param {string} to username of request send to
*/
User.sendRequest = (from, to) => {
return new Promise((resolve, reject) => {
const userId = 0;
const friendId = 0;
User.findByUsername(from)
.then((data) => {
userId = data.id;
console.log(data);
User.findByUsername(to)
.then((data) => {
friendId = data.id;
Connects.checkConnectionStatus(from, to)
.then((areFriends) => {
if (!areFriends) {
const connects = new Connects({ userId, friendId });
console.log(connects);
Connects.create(connects)
.then((data) => resolve(data))
.catch((err) => reject(err));
} else {
const newError = new Error(
`Users ${from} and ${to} are already connections`
);
newError.status = 400;
return reject(newError);
}
})
.catch((err) => {
console.log(`Error: ${err}`);
return reject(err);
});
})
.catch((err) => {
if (err.status && err.status === 404) {
reject(err);
}
});
})
.catch((err) => {
if (err.status && err.status === 404) {
reject(err);
}
});
});
};
在这里,我首先检查提供的用户名是否有效。 我正在使用模型用户,该模型为我提供了通过findByUsername()函数检查用户是否具有用户ID的功能。
我分别检查了每个模型,它们正在工作。但是在上述路线上发送请求时,邮递员继续加载。请让我知道解决方法。
按用户名模型查找:
/**
* findByUsername
* * Finds a user by username
* @param {string} username username whose detail needed to find
*/
User.findByUsername = (username) => {
return new Promise((resolve, reject) => {
const query = `
SELECT
u.*, p.*
FROM user u INNER JOIN profile p
ON u.username = p.username
WHERE u.username = ?
`;
sql.query(query, username, (err, res) => {
if (err) {
console.log(`Error: ${err}`);
return reject(err);
}
if (!res.length) {
const newError = new Error(`User with username ${username} not found`);
newError.status = 404;
return reject(newError);
}
console.log(`Found user: `, res);
resolve(res[0]);
});
});
};
连接构造函数:
// constructor
const Connects = function (connect) {
this.userId = connect.userId;
this.friendId = connect.friendId;
this.status = 1;
};
创建连接的方法:
/**
* create
* * Creates a new connection request between two users
* @param {object} newConnect A connection object
*/
Connects.create = (newConnect) => {
console.log(newConnect);
return new Promise((resolve, reject) => {
const query = "INSERT INTO connects SET ?";
sql.query(query, newConnect, (err, res) => {
if (err) {
console.log(`Error: ${err}`);
return reject(err);
}
const response = { id: res.insertId, ...newConnect };
console.log(`Created connect: `, response);
resolve(response);
});
});
};
这是路线:
// TODO: Send request
router.post(
"/request",
[body("from").not().isEmpty().escape(), body("to").not().isEmpty().escape()],
(req, res, next) => {
// Finds validation errors and return error object
const errors = validationResult(req);
if (!errors.isEmpty()) {
return res.status(400).json({ errors: errors.array() });
}
const { from, to } = req.body;
if (from === to) {
const newError = new Error("Equal input is not allowed");
newError.status = 400;
next(newError);
} else {
User.sendRequest(from, to)
.then((data) => res.json(data))
.catch((err) => next(err));
}
}
);
答案 0 :(得分:0)
您没有向我们显示您API的Express路由处理程序。从您的邮递员的死讯看来,您的路由处理程序永远不会调用类似的东西
res.json(whatever).status(200).end()
在您所有的诺言兑现之后。邮递员耐心地等待来自节点快速服务器的响应或超时。
答案 1 :(得分:0)
问题已修正:
这么尴尬地说,是的,我犯了这个错误。
在sendRequest方法中,我定义了常量变量userId和friendId,并且正在像userId = data.id一样对其进行修改。
我使用let关键字将常量变量更改为局部变量。
已更改:
发件人:
const userId = 0;
const friendId = 0;
收件人:
let userId = 0;
let friendId = 0;
但是,我想解释一下为什么在尝试更改常量变量时控制台没有出现错误?这件事发生在Promises吗?