我有一个表单,可以向节点发送搜索字词。在请求标头中,我将内容类型设置为json,但我仍然遇到此错误。我不知道我做错了什么。新节点js。我使用角4作为前端:
这是我的搜索表单的组件代码:
onSearch(){
console.log('the sent term is: ', this.searchForm.value.term)
this._auth.searchTweets(this.searchForm.value.term)
.subscribe(
(res) => {
console.log(res)
}
)
}
这是我的服务代码,它将术语发送到节点后端:
searchTweets(term){
console.log('from auth search: ', term)
let headers = new Headers();
headers.append('Content-Type', 'application/json');
return this.http.post('http://localhost:4000/users/profile',term, {headers:headers})
.map(res => res.json());
}
我的节点端代码是:
router.post('/profile',(req,res,next) => {
console.log('the backend term: ',req.body.term)
})
在开发工具的网络选项卡中我得到html而不是json?我在这里失踪了什么?
我尝试在节点端记录res:
SyntaxError: Unexpected token # in JSON at position 0
at Object.parse (native)
at createStrictSyntaxError (C:\xampp\htdocs\angssrtest\node_modules\body-parser\lib\types\json.js:157:10)
at parse (C:\xampp\htdocs\angssrtest\node_modules\body-parser\lib\types\json.js:83:15)
at C:\xampp\htdocs\angssrtest\node_modules\body-parser\lib\read.js:121:18
at invokeCallback (C:\xampp\htdocs\angssrtest\node_modules\raw-body\index.js:224:16)
at done (C:\xampp\htdocs\angssrtest\node_modules\raw-body\index.js:213:7)
at IncomingMessage.onEnd (C:\xampp\htdocs\angssrtest\node_modules\raw-body\index.js:273:7)
at ZoneDelegate.invokeTask (C:\xampp\htdocs\angssrtest\node_modules\zone.js\dist\zone-node.js:425:31)
at Zone.runTask (C:\xampp\htdocs\angssrtest\node_modules\zone.js\dist\zone-node.js:192:47)
at ZoneTask.invokeTask (C:\xampp\htdocs\angssrtest\node_modules\zone.js\dist\zone-node.js:499:34)
at IncomingMessage.ZoneTask.invoke (C:\xampp\htdocs\angssrtest\node_modules\zone.js\dist\zone-node.js:488:48)
at emitNone (events.js:86:13)
at IncomingMessage.emit (events.js:185:7)
at endReadableNT (_stream_readable.js:974:12)
at ZoneDelegate.invokeTask (C:\xampp\htdocs\angssrtest\node_modules\zone.js\dist\zone-node.js:425:31)
at Zone.runTask (C:\xampp\htdocs\angssrtest\node_modules\zone.js\dist\zone-node.js:192:47)
顺便说一句,我可以通过相同的路线上班。所以我不明白为什么在帖子中我有这个问题
答案 0 :(得分:1)
错误是因为您正在接收html文件,res.json()无法解析HTML文件。确保节点中存在适当的路由,并且您正在发送正确的响应。
我注意到您正在点击的端点是http://localhost:4000/users/profile,而您正在收听的端点是'/ profile'。用户在路线中缺失。我假设你有一个/ *监听器,它返回一个html文件,这就是你得到的响应。
searchTweets(term) {
console.log('from auth search: ', term)
let headers = new Headers();
headers.append('Content-Type', 'application/json');
return this.http.post('http://localhost:4000/users/profile',term,
{headers:headers})
.map(res => res.json());
}
并且路由侦听器不会发送任何响应。
router.post('/profile',(req,res,next) => {
console.log('the backend term: ',req.body.term)
})