Node.js [语法错误:JSON解析错误:无法识别的令牌';<;';]

Node.js [语法错误:JSON解析错误:无法识别的令牌';<;';],node.js,react-native,Node.js,React Native,我正在向服务器发送post请求以验证我的登录数据,但当我按下登录按钮时,它显示此错误: [SyntaxError:JSON解析错误:无法识别的令牌'感谢您发布服务器代码。我认为问题在于您根本没有使用JSON进行响应。请更改您对404的响应(以及服务器端的其他响应): 在此处删除JSON.stringify并尝试发出请求 body: JSON.stringify({ "username": username, "password

我正在向服务器发送post请求以验证我的登录数据,但当我按下登录按钮时,它显示此错误:


[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
        })