app.js:中的此代码
var express = require('express'),
app = express(),
port = parseInt(process.env.PORT, 10) || 3000;
app.configure(function(){
app.use(express.bodyParser());
app.use(app.router);
});
app.listen(port);
app.post("/", function(req, res) {
console.log("Body: " + req.body);
res.send({ status: 'SUCCESS' });
});
运行
PS C:> curl -X POST -H "Content-Type:application/json" -d '{"type":"server","name":"SERVER1"}' http://localhost:3000/
结果在:
SyntaxError: Unexpected token t
at Object.parse (native)
at IncomingMessage.<anonymous (C:tempneo4jstest2node_modulesexpressnode_modulesconnectlibmiddlewarejson.js
:76:27)
at IncomingMessage.EventEmitter.emit (events.js:92:17)
at _stream_readable.js:910:16
at process._tickCallback (node.js:415:13)
我在Ubuntu 13.04上测试了同样的代码,它运行得很好。
在Windows上有什么不同或调整吗?
Powershell拯救:
PS:> $body = ConvertTo-Json @{"type" = "server"; "name" = "SERVER1"}
PS:> Invoke-WebRequest -Body $body -Uri http://localhost:3000/ -ContentType application/json -Method POST
对于我使用curl的Windows 64位机器,这对我来说很有效:
curl -H "Content-Type: application/json" -X POST
-d "{"firstName":"First", "lastName":"Last", "email":"user@example.c
om", "username":"username", "password":"password"}" localhost:3000/user
s
Windows命令行不喜欢使用单引号。我还没有尝试过,但我相信这会奏效:
curl -X POST -H "Content-Type:application/json" -d "{"type":"server","name":"SERVER1"}"
单引号已替换为双引号,内部双引号已转义。
更新
我能够在我的本地Windows7(64位)机器上实现这一点:
C:>f:utilcurl.exe -X POST -H "Content-Type:application/json" -d "{"type":"server","name":"SERVER1"}" http://localhost:3000/
{
"status": "SUCCESS"
}
curl版本(刚从http://curl.haxx.se/)
C:>f:utilcurl.exe --version
curl 7.31.0 (x86_64-pc-win32) libcurl/7.31.0
Protocols: dict file ftp gopher http imap ldap pop3 rtsp smtp telnet tftp
Features: AsynchDNS GSS-Negotiate Largefile NTLM SSPI
节点版本:
C:>node --version
v0.8.18
使用单引号(同时使用转义双引号和未转义双引号)运行导致以下错误:
Error: invalid json
at Object.exports.error (F:tmpstackoverflownode_modulesexpressnode_modulesconnectlibutils.js:62:13)
at IncomingMessage.module.exports (F:tmpstackoverflownode_modulesexpressnode_modulesconnectlibmiddlewarejson.js:74:71)
at IncomingMessage.EventEmitter.emit (events.js:93:17)
at IncomingMessage._emitEnd (http.js:366:10)
at HTTPParser.parserOnMessageComplete [as onMessageComplete] (http.js:149:23)
at Socket.socket.ondata (http.js:1786:22)
at TCP.onread (net.js:404:27)