Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js ExpressREST服务器因Ember数据放置而丢失有效负载_Node.js_Express_Mongoose_Connect_Ember Data - Fatal编程技术网

Node.js ExpressREST服务器因Ember数据放置而丢失有效负载

Node.js ExpressREST服务器因Ember数据放置而丢失有效负载,node.js,express,mongoose,connect,ember-data,Node.js,Express,Mongoose,Connect,Ember Data,我正在扩展标准的Ember示例项目(在coffeescript中),以便与express/mongoose RESTful服务器进行对话。我已通过POST成功获取所有和单个记录,使用推荐的: Find GET /people/123 Find All GET /people 现在,当试图通过余烬适配器触发的余烬数据PUT更新记录时 Update PUT /people/123 它不起作用了 分析:客户端 我用Chrome开发工具分析客户端

我正在扩展标准的Ember示例项目(在coffeescript中),以便与express/mongoose RESTful服务器进行对话。我已通过POST成功获取所有和单个记录,使用推荐的:

Find        GET     /people/123
Find All    GET     /people
现在,当试图通过余烬适配器触发的余烬数据PUT更新记录时

Update      PUT     /people/123
它不起作用了

分析:客户端 我用Chrome开发工具分析客户端,用console.log分析服务器端。这是我在客户端看到的。余烬数据向服务器发出看跌期权和期权调用

在PUT中,我看到有效负载包含用户编辑,并且格式看起来正确

# ===== Adapter =====
# Extended to handle mongo's _id as primarykey
App.Adapter = DS.RESTAdapter.extend(
 serializer: DS.RESTSerializer.extend(
  primaryKey: (type) -> "_id"
  )   
)
DS.RESTAdapter.reopen({url: 'http://localhost:3000'});

# ===== Store =====
App.Store = DS.Store.extend(
  revision: 12
  adapter: App.Adapter
)

# ===== Controller =====
module.exports = App.PostController = Ember.ObjectController.extend
    save: ->
        @get("store").commit()
        @get("target.router").transitionTo "posts.index"

# ==== Model ====
module.exports = App.Post = DS.Model.extend
    title: DS.attr 'string'
    author: DS.attr 'string'
    intro: DS.attr 'string'
    extended: DS.attr 'string'
    publishedAt: DS.attr 'date'

response选项卡显示了一堆废话,所以我假设问题出在服务器端

分析:服务器 在服务器端,当我转储请求变量时,我得到了这个结果。正文作为
{post:{}}
接收,即结构正确但内容空白。并收到正确的mongo id

以下是来自服务器路由器的堆栈跟踪:

Trace
    at /home/vagrant/restl/node_modules/restgen/lib/routes.js:68:15
    at callbacks (/home/vagrant/restl/node_modules/express/lib/router/index.js:161:37)
    at param (/home/vagrant/restl/node_modules/express/lib/router/index.js:135:11)
    at param (/home/vagrant/restl/node_modules/express/lib/router/index.js:132:11)
    at param (/home/vagrant/restl/node_modules/express/lib/router/index.js:132:11)
    at pass (/home/vagrant/restl/node_modules/express/lib/router/index.js:142:5)
    at Router._dispatch (/home/vagrant/restl/node_modules/express/lib/router/index.js:170:5)
    at Object.router (/home/vagrant/restl/node_modules/express/lib/router/index.js:33:10)
    at next (/home/vagrant/restl/node_modules/express/node_modules/connect/lib/proto.js:190:15)
    at Object.session [as handle] (/home/vagrant/restl/node_modules/express/node_modules/connect/lib/middleware/session.js:301:7)
    at next (/home/vagrant/restl/node_modules/express/node_modules/connect/lib/proto.js:190:15)
    at Object.cookieParser [as handle] (/home/vagrant/restl/node_modules/express/node_modules/connect/lib/middleware/cookieParser.js:60:5)
    at next (/home/vagrant/restl/node_modules/express/node_modules/connect/lib/proto.js:190:15)
    at Object.allowCrossDomain [as handle] (/home/vagrant/restl/app.js:21:5)
    at next (/home/vagrant/restl/node_modules/express/node_modules/connect/lib/proto.js:190:15)
    at Object.methodOverride [as handle] (/home/vagrant/restl/node_modules/express/node_modules/connect/lib/middleware/methodOverride.js:49:5)
    at next (/home/vagrant/restl/node_modules/express/node_modules/connect/lib/proto.js:190:15)
    at multipart (/home/vagrant/restl/node_modules/express/node_modules/connect/lib/middleware/multipart.js:60:27)
    at /home/vagrant/restl/node_modules/express/node_modules/connect/lib/middleware/bodyParser.js:57:9
    at urlencoded (/home/vagrant/restl/node_modules/express/node_modules/connect/lib/middleware/urlencoded.js:48:27)
    at /home/vagrant/restl/node_modules/express/node_modules/connect/lib/middleware/bodyParser.js:55:7
    at IncomingMessage.<anonymous> (/home/vagrant/restl/node_modules/express/node_modules/connect/lib/middleware/json.js:82:9)
    at IncomingMessage.EventEmitter.emit (events.js:92:17)
    at _stream_readable.js:910:16
    at process._tickCallback (node.js:415:13)
在客户端的某个地方,请求负载丢失了。 如果相关的话,我很乐意发布服务器端代码的其他部分,比如路由。请在评论中询问

客户端代码 这是余烬的一面,我很确定这是正确的

# ===== Adapter =====
# Extended to handle mongo's _id as primarykey
App.Adapter = DS.RESTAdapter.extend(
 serializer: DS.RESTSerializer.extend(
  primaryKey: (type) -> "_id"
  )   
)
DS.RESTAdapter.reopen({url: 'http://localhost:3000'});

# ===== Store =====
App.Store = DS.Store.extend(
  revision: 12
  adapter: App.Adapter
)

# ===== Controller =====
module.exports = App.PostController = Ember.ObjectController.extend
    save: ->
        @get("store").commit()
        @get("target.router").transitionTo "posts.index"

# ==== Model ====
module.exports = App.Post = DS.Model.extend
    title: DS.attr 'string'
    author: DS.attr 'string'
    intro: DS.attr 'string'
    extended: DS.attr 'string'
    publishedAt: DS.attr 'date'
更新#1 来自npm ls的版本信息

vagrant@precise32:~/brunch-ember$ npm ls
brunch-with-ember-reloaded@0.0.3 /home/vagrant/brunch-ember
├─┬ auto-reload-brunch@1.5.2
│ └─┬ ws@0.4.20
│   ├── commander@0.6.1
│   ├── options@0.0.5
│   └── tinycolor@0.0.1
├─┬ chai@1.7.2
│ └── assertion-error@1.0.0
├─┬ clean-css-brunch@1.5.1
│ └─┬ clean-css@0.10.2
│   └─┬ commander@1.1.1
│     └── keypress@0.1.0
├─┬ coffee-script-brunch@1.5.1
│ └── coffee-script@1.6.3
├── css-brunch@1.5.1
├─┬ dc@1.4.0 extraneous
│ ├── crossfilter@1.2.0
│ └─┬ d3@3.2.6
│   └─┬ jsdom@0.5.7
│     ├─┬ contextify@0.1.6
│     │ └── bindings@1.1.1
│     ├── cssom@0.2.5
│     ├── cssstyle@0.2.3
│     ├── htmlparser@1.7.6
│     ├── nwmatcher@1.3.1
│     └─┬ request@2.22.0
│       ├── aws-sign@0.3.0
│       ├── cookie-jar@0.3.0
│       ├── forever-agent@0.5.0
│       ├─┬ form-data@0.0.8
│       │ ├── async@0.2.9
│       │ └─┬ combined-stream@0.0.4
│       │   └── delayed-stream@0.0.5
│       ├─┬ hawk@0.13.1
│       │ ├─┬ boom@0.4.2
│       │ │ └── hoek@0.9.1
│       │ ├── cryptiles@0.2.2
│       │ ├── hoek@0.8.5
│       │ └─┬ sntp@0.2.4
│       │   └── hoek@0.9.1
│       ├─┬ http-signature@0.10.0
│       │ ├── asn1@0.1.11
│       │ ├── assert-plus@0.1.2
│       │ └── ctype@0.5.2
│       ├── json-stringify-safe@4.0.0
│       ├── mime@1.2.9
│       ├── node-uuid@1.4.0
│       ├── oauth-sign@0.3.0
│       ├── qs@0.6.5
│       └── tunnel-agent@0.3.0
├─┬ ember-handlebars-brunch@1.0.4 (git+ssh://git@github.com:bartsqueezy/ember-handlebars-brunch.git#19b9cfd141
│ └── coffee-script@1.6.2
├─┬ express@3.3.4
│ ├── buffer-crc32@0.2.1
│ ├─┬ commander@1.2.0
│ │ └── keypress@0.1.0
│ ├─┬ connect@2.8.4
│ │ ├── bytes@0.2.0
│ │ ├── formidable@1.0.14
│ │ ├── pause@0.0.1
│ │ ├── qs@0.6.5
│ │ └── uid2@0.0.2
│ ├── cookie@0.1.0
│ ├── cookie-signature@1.0.1
│ ├── debug@0.7.2
│ ├── fresh@0.1.0
│ ├── methods@0.0.1
│ ├── mkdirp@0.3.5
│ ├── range-parser@0.0.4
│ └─┬ send@0.1.3
│   └── mime@1.2.9
├─┬ jade@0.32.0
│ ├── character-parser@1.0.2
│ ├─┬ commander@1.2.0
│ │ └── keypress@0.1.0
│ ├─┬ constantinople@1.0.1
│ │ └─┬ uglify-js@2.3.6
│ │   ├── async@0.2.9
│ │   ├─┬ optimist@0.3.7
│ │   │ └── wordwrap@0.0.2
│ │   └─┬ source-map@0.1.25
│ │     └── amdefine@0.0.5
│ ├── mkdirp@0.3.5
│ ├─┬ monocle@0.1.48
│ │ └─┬ readdirp@0.2.5
│ │   └─┬ minimatch@0.2.12
│ │     ├── lru-cache@2.3.0
│ │     └── sigmund@1.0.0
│ ├─┬ transformers@2.0.1
│ │ ├─┬ css@1.0.8
│ │ │ ├── css-parse@1.0.4
│ │ │ └── css-stringify@1.0.5
│ │ ├─┬ promise@2.0.0
│ │ │ └── is-promise@1.0.0
│ │ └─┬ uglify-js@2.2.5
│ │   ├─┬ optimist@0.3.7
│ │   │ └── wordwrap@0.0.2
│ │   └─┬ source-map@0.1.25
│ │     └── amdefine@0.0.5
│ └─┬ with@1.1.0
│   └─┬ uglify-js@2.3.6
│     ├── async@0.2.9
│     ├─┬ optimist@0.3.7
│     │ └── wordwrap@0.0.2
│     └─┬ source-map@0.1.25
│       └── amdefine@0.0.5
├── javascript-brunch@1.5.1
├─┬ karma@0.8.1
│ ├── chokidar@0.5.3
│ ├── coffee-script@1.4.0
│ ├── colors@0.6.0-1
│ ├── dateformat@1.0.2-1.2.3
│ ├─┬ glob@3.1.20
│ │ ├── graceful-fs@1.2.2
│ │ └── inherits@1.0.0
│ ├── growly@1.1.1
│ ├─┬ http-proxy@0.10.0
│ │ ├── pkginfo@0.2.3
│ │ └─┬ utile@0.1.7
│ │   ├── async@0.1.22
│ │   ├── deep-equal@0.0.0
│ │   ├── i@0.3.1
│ │   ├── mkdirp@0.3.5
│ │   ├── ncp@0.2.7
│ │   └── rimraf@1.0.9
│ ├─┬ istanbul@0.1.22
│ │ ├── abbrev@1.0.4
│ │ ├── async@0.1.22
│ │ ├─┬ escodegen@0.0.23
│ │ │ ├── esprima@1.0.3
│ │ │ ├── estraverse@0.0.4
│ │ │ └─┬ source-map@0.1.25
│ │ │   └── amdefine@0.0.5
│ │ ├── esprima@0.9.9
│ │ ├── fileset@0.1.5
│ │ ├─┬ handlebars@1.0.12
│ │ │ └─┬ uglify-js@2.3.6
│ │ │   ├── async@0.2.9
│ │ │   └─┬ source-map@0.1.25
│ │ │     └── amdefine@0.0.5
│ │ ├── mkdirp@0.3.5
│ │ ├── nopt@2.0.0
│ │ ├── which@1.0.5
│ │ └── wordwrap@0.0.2
│ ├─┬ LiveScript@1.0.1
│ │ └── prelude-ls@1.0.0
│ ├── lodash@0.9.2 invalid
│ ├─┬ log4js@0.5.6
│ │ └── async@0.1.15
│ ├── mime@1.2.7
│ ├─┬ minimatch@0.2.9
│ │ ├── lru-cache@2.0.4
│ │ └── sigmund@1.0.0
│ ├─┬ optimist@0.3.5
│ │ └── wordwrap@0.0.2
│ ├── pause@0.0.1
│ ├── q@0.8.12
│ ├─┬ rimraf@2.1.4
│ │ └── graceful-fs@1.2.2
│ ├─┬ socket.io@0.9.13
│ │ ├── base64id@0.1.0
│ │ ├── policyfile@0.0.4
│ │ ├── redis@0.7.3
│ │ └─┬ socket.io-client@0.9.11
│ │   ├─┬ active-x-obfuscator@0.0.1
│ │   │ └── zeparser@0.0.5
│ │   ├── uglify-js@1.2.5
│ │   ├─┬ ws@0.4.27
│ │   │ ├── commander@0.6.1
│ │   │ ├── options@0.0.5
│ │   │ └── tinycolor@0.0.1
│ │   └── xmlhttprequest@1.4.2
│ └── xmlbuilder@0.4.2
├─┬ mocha@1.12.0
│ ├── commander@0.6.1
│ ├── debug@0.7.2
│ ├── diff@1.0.2
│ ├─┬ glob@3.2.1
│ │ ├── graceful-fs@1.2.2
│ │ ├── inherits@1.0.0
│ │ └─┬ minimatch@0.2.12
│ │   ├── lru-cache@2.3.0
│ │   └── sigmund@1.0.0
│ ├── growl@1.7.0
│ ├─┬ jade@0.26.3
│ │ └── mkdirp@0.3.0
│ ├── mkdirp@0.3.5
│ └── ms@0.3.0
├── moment@2.0.0
├─┬ mongoose@3.6.14
│ ├── hooks@0.2.1
│ ├─┬ mongodb@1.3.11
│ │ ├── bson@0.1.9
│ │ └── kerberos@0.0.3
│ ├── mpath@0.1.1
│ ├─┬ mpromise@0.2.1
│ │ └── sliced@0.0.4
│ ├── ms@0.1.0
│ ├── muri@0.3.1
│ ├── regexp-clone@0.0.1
│ └── sliced@0.0.3
├─┬ restgen@1.0.2
│ ├── UNMET DEPENDENCY cli-color 0.2.2
│ ├── UNMET DEPENDENCY commander https://github.com/alexferreira/commander.js/tarball/master
│ ├── UNMET DEPENDENCY ejs latest
│ ├── UNMET DEPENDENCY fleck 0.5.1
│ ├── UNMET DEPENDENCY fs-extra 0.6.1
│ └── UNMET DEPENDENCY rsvp-that-works 1.2.0
├── showdown@0.3.1
├─┬ stylus-brunch@1.5.1
│ ├─┬ nib@0.9.2
│ │ └─┬ stylus@0.31.0
│ │   ├── cssom@0.2.5
│ │   ├── debug@0.7.2
│ │   └── mkdirp@0.3.5
│ ├─┬ node-sprite@0.1.1
│ │ ├── coffee-script@1.3.3
│ │ ├── imagemagick@0.1.2
│ │ ├─┬ seq@0.3.5
│ │ │ ├─┬ chainsaw@0.0.9
│ │ │ │ └── traverse@0.3.9
│ │ │ └─┬ hashish@0.0.4
│ │ │   └── traverse@0.6.3
│ │ ├── underscore@1.3.1
│ │ └── watch@0.5.1
│ └─┬ stylus@0.32.1
│   ├── cssom@0.2.5
│   ├── debug@0.7.2
│   └── mkdirp@0.3.5
├─┬ supertest@0.6.0
│ ├── methods@0.0.1
│ └─┬ superagent@0.10.0
│   ├─┬ better-assert@0.1.0
│   │ └── callsite@1.0.0
│   ├── cookiejar@1.3.0
│   ├── emitter-component@0.0.6
│   ├── formidable@1.0.9
│   ├── mime@1.2.5
│   └── qs@0.5.2
├── twitter-bootstrap@2.1.1
└─┬ uglify-js-brunch@1.5.1
  └─┬ uglify-js@2.2.5
    ├─┬ optimist@0.3.7
    │ └── wordwrap@0.0.2
    └─┬ source-map@0.1.25
      └── amdefine@0.0.5

我还没有深入研究,但我认为这可能是ember数据和restgen之间的细微差别:restgen需要表单数据(title=foo&body=bar),除非url以“.json”结尾。但是ember数据正在上传json,而没有将其添加到URL中

我还没有从任何一方找到任何说明如何更改默认行为的文档,但是如果这确实是一个问题,那么您应该能够找到解决方法


更新:检查这一点的一个快速方法是右键单击Chrome开发工具中的ajax请求,选择“复制为卷曲”,然后将其粘贴到记事本中,编辑url以在末尾包含“.ajax”,然后从命令行运行命令。如果您的服务器正确地处理了这一问题,那么这是一个好迹象,表明我们走上了正确的轨道。

您使用的是什么版本的所有内容?你可以运行
npmls
打印出来。这是一棵大树,但上面是更新