2014-10-26 88 views
1

下工作得很好,我:“[语法错误:输入意外结束]” 使用Express的Node.js的

app.get('/doi/meta/:doiName1/:doiName2', function(request, response) { 

    var path = '/doi/json?doi='+request.params.doiName1+'/'+request.params.doiName2; 

    // etc. 

举例来说,我可以打电话:

curl -X GET http://localhost:1337/doi/meta/09.1010/9347426 

,并得到我期待的回应。 (请注意,我查询对象的名字都有一个斜杠)

因为有对象名称中一些潜在的变化,我需要改变服务器,这样我可以构建我的查询是这样的:

curl -X GET http://localhost:1337/doi/meta?doiName=09.1010/9347426 

我已经试过许多方法,但我总是会收到以下消息:

[SyntaxError: Unexpected end of input] 

这表明,我认为我找错了地方的问题。但是,我可以将服务器代码更改回上述,它工作正常。我的代码目前看起来像这样:

app.get('/doi/meta', function(request, response) { 

    //var path = '/doi/json?doi='+request.params.doiName1+'/'+request.params.doiName2; 

    var args = url.parse(request.url, true).query; 
    var path = 'doi/json?doi='+args['doiName']; 
    console.log('path is '+path); 

    // etc. 

console.log语句永远不会到达。导致此意外输入错误结束的问题是什么?

+0

当Express已经为你做了这件事的时候,你为什么要解析'request.url'?查询参数可在['req.query'](http://expressjs.com/4x/api.html#req.query)对象中找到。 – mscdex 2014-10-26 17:54:48

回答

0

发生了什么事是几百行以上在同一文件中还有一个GET听众:

app.get('/doi/:user', function(request, response) { 

此块醒目的调用,如:

http://localhost:1337/doi/meta?doiName=09.2815/4539580 

,并去寻找一个用户名为元。当然,当我构造的GET块这样并没有出现这样的现象:

app.get('/doi/meta/:doiName1/:doiName2', function(request, response) { 

我要通过“深化”的第一个听众上面类似,以解决这个问题...

app.get('/doi/user/:user', function(request, response) { 

另一个教训是在相同的文件中将类似的URL调用分组在一起。

感谢您的回复。

6

A SyntaxError: Unexpected end of input错误通常意味着您的代码中某处丢失了右括号,大括号,括号或类似字符,或者您正尝试JSON.parse()缺少此类字符的字符串。

通过javascript linter运行您的代码/ JSON字符串(例如jshint)以查找语法错误。

相关问题