SyntaxError:位于0的JSON中的意外标记#

时间:2017-11-06 06:35:35

标签: javascript node.js

我有一个表单,可以向节点发送搜索字词。在请求标头中,我将内容类型设置为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)

顺便说一句,我可以通过相同的路线上班。所以我不明白为什么在帖子中我有这个问题

1 个答案:

答案 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)
})