【发布时间】:2020-01-11 18:58:40
【问题描述】:
我对这段代码感到困惑,所以我需要第三眼来寻找解决方案。
我正在使用带有 Node.JS (Express) 的 REST API 开发一个 ReactJS 应用程序,但我收到了这个错误:
SyntaxError:“JSON.parse:JSON 数据的第 1 行第 1 列出现意外字符”
我正在使用Sequelize ORM 在 Node.JS 中处理模型和数据库。 我也在为 Node.JS 使用 CORS 模块。
这个实现工作正常。
// Node.js Route for login
const router = require('express').Router();
const User = require('user');
router.post("/login", async (req, res) => {
try {
await User.findOne({
where: {
email: req.body.email,
password: req.body.password,
}
}).then((user) => {
if (!user) {
return res.send({message: "Login error!"});
} else {
const userData = {id: user.id, email: user.email};
res.send({"user": userData});
}
}).catch((err) => {
return res.send(err);
});
} catch (err) {
return res.send(err);
}
});
// ReactJS for login
loginFunction(e, data) {
e.preventDefault();
fetch('http://localhost:4500/login', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(data)
})
.then(response => response.json())
.then(json => {
this.setState({'user': json['user']});
})
.catch((err) => {
console.log(err);
this.setState({errors: "Login error"})
});
}
另一方面,这个实现不能正常工作并抛出上面的SyntaxError:
// Node.JS for Posts
const router = require('express').Router();
const Post = require('post');
router.get("/posts", async (req, res) => {
try {
await Post.findAndCountAll()
.then((posts) => {
res.send({"posts": posts});
}).catch((err) => {
return res.send(err);
});
} catch (err) {
return res.send(err);
}
});
// ReactJS for Posts
postsFunction() {
fetch('http://localhost:4500/posts', {
method: 'GET',
headers: {
'Content-Type': 'application/json'
}
})
.then(response => response.json())
.then(json => {
this.setState({'posts': json.posts.rows});
})
.catch((err) => {
console.log(err);
this.setState({errors: "Posts error."})
});
}
如您所见,这两种实现方式差别不大,我缺少什么?
PS:当我在 Postman 上测试第二个实现时,数据检索成功。
【问题讨论】:
-
将刚刚解析为json的数据进行字符串化的原因是什么?
this.setState({posts: JSON.stringify(json.posts.rows)}) -
当我从另一个路由器示例复制时,它只是保留在那里。已在代码示例中修复。修改它并不代表积极的结果。
标签: javascript node.js json reactjs sequelize.js