Node.js [语法错误:JSON解析错误:无法识别的令牌';<;';]
我正在向服务器发送post请求以验证我的登录数据,但当我按下登录按钮时,它显示此错误:Node.js [语法错误:JSON解析错误:无法识别的令牌';<;';],node.js,react-native,Node.js,React Native,我正在向服务器发送post请求以验证我的登录数据,但当我按下登录按钮时,它显示此错误: [SyntaxError:JSON解析错误:无法识别的令牌'感谢您发布服务器代码。我认为问题在于您根本没有使用JSON进行响应。请更改您对404的响应(以及服务器端的其他响应): 在此处删除JSON.stringify并尝试发出请求 body: JSON.stringify({ "username": username, "password
[SyntaxError:JSON解析错误:无法识别的令牌'感谢您发布服务器代码。我认为问题在于您根本没有使用JSON进行响应。请更改您对404的响应(以及服务器端的其他响应):
在此处删除JSON.stringify并尝试发出请求
body: JSON.stringify({
"username": username,
"password": password
})
服务器没有使用有效的JSON进行响应。@xehpuk以及如何解决此问题分析您的服务器代码。看起来服务器可能会使用HTML进行响应,这是一个404未找到错误页面。您需要对服务器进行多一点调试。看起来您遇到了404错误,这意味着资源
http://192.168.0.106:3000/login
找不到。可能是路径无效或设置不正确。请尝试使用类似curl:curl-k-v-X POST的工具从命令行访问它http://192.168.0.106:3000/login -d'{“用户名”:“用户名”,“密码”:“密码”}“
看看你得到了什么。Simeon的建议很好。如果你没有cURL,那么你也可以尝试const data=wait response.text();
,这将从服务器获得纯文本响应,而不需要JS试图解析它。还可以尝试console.log(response.status,response.statusText)
,它将告诉您服务器给您的HTTP响应代码。如果您还编写了服务器代码,一个非常常见的错误是您使用app.post(“login”)而不是app.post(“/login”)设置登录页面,或者使用app.get(“/login”)设置登录页面错了。谢谢你的回复,我已经试过你的方法了,但还是一样的问题[Sat Jan 02 2021 02:53:07.490]日志404未定义[Sat Jan 02 2021 02:53:07.780]日志[SyntaxError:JSON解析错误:Unrecogned token'真正的问题是服务器和客户端不一致。只要客户端不尝试将其解析为JSON,发送纯文本以获取错误响应就可以了。我尝试了,但没有用
[Sat Jan 02 2021 01:03:22.300] LOG undefined
[Sat Jan 02 2021 01:03:22.500] LOG undefined
constructor(props) {
super(props);
this.state = {
isLoading: true,
loggedIn: false,
username: '',
password: '',
}
}
validateUser = async (username, password) => {
try {
const response = await fetch('http://192.168.0.106:3000/login', {
method: 'POST',
headers: {
Accept: 'application/json',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"username": username,
"password": password
})
});
console.log(response);
const data = await response.json();
await AsyncStorage.setItem('jwt', data.access_token);
await this.props.navigation.navigate('adminD')
} catch (e) {
console.log(e);
}
};
<TextInput
style={{ flex: 1 }}
placeholder={'username'}
onChangeText={(username) => this.setState({ username })}
value={this.state.username}
/>
<TextInput
style={{ flex: 1 }}
placeholder={'password'}
onChangeText={(password) => this.setState({ password })}
value={this.state.password}
secureTextEntry={true}
password={true}
/>
app.post('/login', (req, res) => {
const username = req.body.username;
const SECRET_KEY = CONFIG.secret_key;
findUserByUsername(username, (err, user) => {
if (err) return res.status(500).send('Server error!');
if (!user) return res.status(404).send('User not found!');
const result = bcrypt.compareSync(req.body.password, user[0].password);
if (!result) return res.status(401).send('Password not valid!');
const expiresIn = 24 * 60 * 60;
const payload = { id: user[0].id };
const accessToken = jwt.sign(payload, SECRET_KEY, {
expiresIn: expiresIn
});
// Check expiration date on the token.
jwt.verify(accessToken, SECRET_KEY, (errs, data) => {
console.log(errs, data);
});
// To fetch the data shown below, grab the key names.
res.status(200).json({ "user": user, "access_token": accessToken, "expires_in": expiresIn });
console.log('Succesful validation of the user.')
});
});
if (!user) return res.status(404).json(error: 'User not found!');
body: JSON.stringify({
"username": username,
"password": password
})