我编写了一个rest api来处理我的聊天应用程序的所有请求,例如登录,注册或发送消息。这对于我的服务器端代码很好用;但是,我想登录或注册以将请求发送到其余api。在api上,永远不会从客户端收到请求。我试着基本上以类似的方式直接在单独的地方进行测试
我正在使用大约一个月前开始的聊天应用
用于处理登录的服务器的代码:
app.route('/login').post(async (req, res) => {
console.log('login request')
var users = await serverController.listDocuments({
database:'chatbase',
collectionName:'users',
query:`{'username':'${req.body.usrnm}'}`
})
if(!users[0]) return res.send('Incorrect Credentials')
var user = new User(users[0])
var isCorrect = await bcrypt.compare(req.body.psw, user.password)
if(!isCorrect) return res.send('Incorrect Credentials')
res.send({token: user.token, username:user.username, id:user.id})
})
客户端代码:
let xhr = new XMLHttpRequest()
xhr.open("POST", 'https://api.domain.com')
xhr.setRequestHeader('Content-Type', "application/json");
xhr.onreadystatechange = () => {
if (xhr.status == 200) {
alert('Reqest succeeded');
}
alert(xhr.status)
}
xhr.send(JSON.stringify({
usrnm:'Example Username',
psw:'Example Password'
}))
服务器代码(Works):
socket.on('login', credentials => {
var opt = {
uri:'https://message-api.glitch.me/login',
method:'POST',
body:credentials,
headers: {
'User-Agent': 'Request-Promise'
},
json:true
}
rp(opt)
.then(res => {
if(res == 'Incorrect Credentials') return socket.emit('loginFailed')
socket.emit('loginSuccess', res)
})
})
服务器端代码从用户那里收到证书,然后将它们转发给api。然后,服务器会收到用户可以使用其发送消息的令牌,或者发送不正确的登录名(Works)。 api代码只是路由各种请求类型,例如创建服务器或登录(根据服务器端请求进行工作)。客户端创建一个请求,然后发送它(从未收到)