代码之家  ›  专栏  ›  技术社区  ›  Nano

POST请求无法在restify中工作,导致500内部服务器错误

  •  1
  • Nano  · 技术社区  · 12 年前

    我在示例RESTAPI中的POST请求中遇到了一个小问题。

    我只有四个用于四个路由的回调方法:

    app.get '/tasks', task.getAll
    app.get '/tasks/done', task.getDone
    app.get '/tasks/notdone', task.withoutDone
    app.post '/tasks', task.newTask
    

    以及:

    模型=需要'/models/models.js'

    exports.getAll = (req, res, next) ->
      models.Task.find {}, 'title description, done', (err, tasks) ->
        if err then err
        res.send tasks
        do next
    
    exports.getDone = (req, res, next) ->
      models.Task.find {done: true}, (err, tasks) ->
        if err then err
        res.send tasks
        do next
    
    exports.withoutDone = (req, res, next) ->
      models.Task.find {done: false}, (err, tasks) ->
        if err then err
        res.send tasks
        do next
    
    exports.newTask = (req, res, next) ->
      if req.params.title is undefined
        return next new restify.InvalidArgumentError 'Title is needed'
    
      taskData = 
        title: req.params.title
        description: req.params.description
        done: req.params.done
    
      task = new Task(taskData)
      task.save (err, data) ->
        if err
          return next new restify.InvalidArgumentError(JSON.stringify(error.errors))
        else
          res.json(data)
    
        res.send 201, task
    

    所以,你可以找到代码 here 在一个独特的要点。

    我跑步时的痕迹

    curl -i -X POST -d '{"title": "hello world", description: "lorem ipsum dolor amet", "done": true}' http://localhost:8080/tasks
    

    在回答中,我得到了500个内部头:

    HTTP/1.1 500 Internal Server Error
    Content-Type: application/json
    Content-Length: 59
    Access-Control-Allow-Origin: *
    Access-Control-Allow-Headers: Accept, Accept-Version, Content-Length, Content-MD5, Content-Type, Date, Api-Version, Response-Time
    Access-Control-Allow-Methods: GET, POST
    Access-Control-Expose-Headers: Api-Version, Request-Id, Response-Time
    Connection: Keep-Alive
    Content-MD5: QFnWTtR6KfhLtGqWpGWZog==
    Date: Mon, 17 Mar 2014 15:12:00 GMT
    Server: task-API
    Request-Id: 7d71a510-ade6-11e3-bd80-292785b198e2
    Response-Time: 1
    
    {"code":"InternalError","message":"restify is not defined"}
    
    1 回复  |  直到 12 年前
        1
  •  4
  •   He Shiming    11 年前

    Restify在错误处理方面具有与expressjs类似的设计。它接受未捕获的异常,并将它们以JSON格式发送回浏览器,并伴有HTTP 500错误,而不是在控制台打印它们。

    消息“restify is not defined”通常表示您忘记拨打 var restify = require('restify'); 在脚本中的某个位置。

    您还可以使用以下代码段在控制台上精确定位错误的位置:

    server.on('uncaughtException', function (req, res, route, err) {
        console.log('uncaughtException', err.stack);
    });
    
    推荐文章