Node.js和Express-不同的结果Windows 7与Ubuntu 13.04



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)

最新更新