- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在扩展标准的 Ember 示例项目(在 coffeescript 中)以与 express/mongoose RESTful 服务器对话。我已经使用推荐的 POSTS 成功获取了所有和单个记录:
Find GET /people/123
Find All GET /people
现在尝试通过 ember-data PUT 更新记录时,通过 Ember 适配器触发。
Update PUT /people/123
而且它不起作用。
我正在使用 Chrome 开发工具分析客户端,使用 console.log 分析服务器端。这是我在客户端看到的。 Ember-data 对服务器进行 PUT 和 OPTIONS 调用。
在 PUT 中,我看到有效负载包含用户编辑,而且格式看起来正确。
响应选项卡显示了一堆废话,所以我假设问题出在服务器端。
在服务器端,当我转储请求变量时,我得到了这个。正文作为 {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)
我的 Express REST 服务器出了什么问题?
这里是服务器代码的相关部分,它是从 npm restgen 派生出来的.
var express = require('express')
, http = require('http')
, path = require('path')
, restgen = require('restgen');
var app = express()
, mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/rest');
// development only
if ('development' == app.get('env')) {
app.use(express.logger({ format: '\x1b[1m :date \x1b[1m:method\x1b[0m \x1b[33m:url\x1b[0m :response-time ms\x1b[0m :status' }));
}
//CORS middleware
var allowCrossDomain = function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
res.header('Access-Control-Allow-Headers', 'Content-Type');
next();
}
// all environments
app.configure(function() {
app.set('root', __dirname);
app.set('port', process.env.PORT || 3000); //3000
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.favicon());
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(allowCrossDomain);
app.use(express.cookieParser('your secret here'));
app.use(express.session());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));
app.use(restgen.ErrorHandler)
});
restgen.Initialize(app, mongoose);
app.use(function(req, res, next){
next(restgen.RestError.NotFound.insert(req.url));
});
// example of how to throw a 404
app.get('/404', function(req, res, next){
next(restgen.RestError.NotFound.insert(req.url));
});
// example of how to throw a 500
app.get('/500', function(req, res, next){
next(new Error('keyboard cat!'));
});
if(!module.parent) {
http.createServer(app).listen(app.get('port'), function(){
console.log('Express server listening on port ' + app.get('port'));
});
}
exports.app = app;
在客户端的某个地方,请求负载丢失了。如果相关,我很乐意发布服务器端代码的其他部分,例如路由。请在评论中提问。
这是 Ember 方面,我很确定这是正确的。
# ===== 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'
来自 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-data 和 restgen 之间的细微差别:restgen 需要表单数据 (title=foo&body=bar),除非 url 以“.json”结尾。但是 ember 数据正在上传 json 而没有将其添加到 URL。
我还没有从任何一方找到任何指示如何更改默认行为的文档,但如果这确实是问题所在,那么您应该能够找到解决方法。
更新:检查这一点的一种快速方法是在 Chrome 的开发人员工具中右键单击 ajax 请求,然后选择“复制为 cURL”,然后将其粘贴到记事本中并编辑 url 以在结束,然后从命令行运行命令。如果您的服务器正确处理了这一点,那么这是一个好兆头,表明我们走在正确的轨道上。
关于node.js - Express REST 服务器丢失来自 Ember-data PUT 的负载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17603372/
谁能解释一下 Server.MapPath(".")、Server.MapPath("~")、Server.MapPath(@"之间的区别\") 和 Server.MapPath("/")? 最佳答案
我不知道,为什么我们要使用 Server.UrlEncode() & Server.UrlDecode()?!在 QueryString 中我们看到 URL 中的任何内容,那么为什么我们要对它们进行编
我已经通过 WHM 在我的一个域上安装了 ssl 证书。网站正在使用 https://xyz.com . 但是它不适用于 https://www.xyz.com .我已经检查了证书,它也适用于 www
我已经使用 WMI 检测操作系统上是否存在防病毒软件,itz 正常工作并通过使用命名空间向我显示防病毒信息,例如 win xp 和 window7 上的名称和实例 ID:\root\SecurityC
我们有 hive 0.10 版本,我们想知道是否应该使用 Hive Server 1 或 Hive Server2。另一个问题是连接到在端口 10000 上运行的 Hive 服务器,使用 3rd 方工
我想在 C++ 中使用 Windows Server API 设置一个 HTTPS 服务器,我使用了示例代码,它在 HTTP 上工作正常,但我就是不能让它在 HTTPS 上工作。 (我不想要客户端 S
我写了一个非常基本的类来发送电子邮件。我用 smtp 服务器对其进行了测试,它工作正常,但是当我尝试使用我公司的交换服务器时,它给出了这个异常: SMTP 服务器需要安全连接或客户端未通过身份验证。服
我的应用程序包含一个“网关”DataSnap REST 服务器,它是所有客户端的第一个访问点。根据客户端在请求中传递的用户名(基本身份验证),请求需要重定向到另一个 DataSnap 服务器。我的问题
我有一个 Tomcat 服务器和一个 Glassfish4 服务器。我的 Servlet 在 Tomcat 服务器上启动得很好,但在 Glassfish4 服务器上给我一个“HTTP Status 4
我在 vmware 上创建了一个 ubuntu 服务器。我用它作为文件服务器。如果我通过托管虚拟机的计算机进行连接,则可以访问它。我无法从同一网络上的其他计算机执行此操作。提前致谢! 最佳答案 首先确
如何重启 Rails 服务器?我从 开始 rails server -d 所以服务器是分离的 我知道的唯一方法就是去做ps 辅助 | grep rails 并 kill -9关于过程#但是像这样杀死进
我实际上正在尝试找到编写一个简单的 XMPP 服务器的最佳方法,或者找到一个占用空间非常小的服务器。我只关心XMPP的核心功能(状态、消息传递、群组消息传递)。目前还在学习 XMPP 协议(proto
我实际上正在尝试找到编写简单 XMPP 服务器的最佳方法,或者找到一个占用空间非常小的方法。我只关心 XMPP 的核心功能(统计、消息、组消息)。目前也在学习 XMPP 协议(protocol),所以
我们正在尝试从 Java JAX-RS 适配器访问 SOAP 1.1 Web 服务。 我们正在使用从 WSDL 生成的 SOAP 客户端。 但是当解码 SOAP 故障时,我们得到以下异常: ... C
目前,我和许多其他人正在多个平台(Windows、OS X 和可能的 Linux)上使用 Python HTTP 服务器。我们正在使用 Python HTTP 服务器来测试 JavaScript 游戏
我有一个连续运行的服务器程序(C#/.NET 2.0 on Linux with mono),我想从 PHP 脚本连接到它以在网站上显示状态信息。 目的是创建一个(某种)实时浏览器游戏(无 Flash
所以我有一个单页客户端应用程序。 正常流程: 应用程序 -> OAuth2 服务器 -> 应用程序 我们有自己的 OAuth2 服务器,因此人们可以登录应用程序并获取与用户实体关联的 access_t
我们刚刚将测试 Web 服务器从 Server 2008 升级到 Server 2012 R2。我们有一个部署我们网站的批处理脚本。当它将站点推送到服务器时,它现在失败了。奇怪的是,我可以使用相同的发
建议一些加载SpagoBI服务器的方法,我尝试了所有方法来解析spagobi服务器。在 Catalina 中,错误是 - * SEVERE: Unable to process Jar entry [
当我们点击应用程序服务器(apache tomcat)时,它会创建一个线程来处理我们的请求并与 tomcat 连接,建立连接,tomcat 创建另一个线程来处理请求并将其传递给连接,连接线程将其传递给
我是一名优秀的程序员,十分优秀!