Node.js Howto Koa Router做得对

Node.js Howto Koa Router做得对,node.js,rest,router,put,koa,Node.js,Rest,Router,Put,Koa,[因为koa路由器维护人员希望询问stackoverflow,所以我开了一个帐户] 编辑:这是关于通过“NPM安装koa路由器”获得的NPM 如何使用Koa路由器并正确地将数据发送到服务器 我会这样做: // trivial stuff ommitted router.put('/devices/myDevice', (ctx, next) => { console.log('ctx:',ctx); ctx.body = "nothing in ctx which loo

[因为koa路由器维护人员希望询问stackoverflow,所以我开了一个帐户]

编辑:这是关于通过“NPM安装koa路由器”获得的NPM

如何使用Koa路由器并正确地将数据发送到服务器

我会这样做:

// trivial stuff ommitted
router.put('/devices/myDevice',  (ctx, next) => {
    console.log('ctx:',ctx);
    ctx.body = "nothing in ctx which looks like my data: whatever"
    next();
});
ctx: { request:
{ method: 'PUT',
 url: '/devices/myDevice',
 header:
  { host: 'localhost:3000',
    connection: 'keep-alive',
    'content-length': '0',
    origin: 'null',
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) 
     AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 
     Safari/537.36',
    accept: '*/*',
    'accept-encoding': 'gzip, deflate, br',
    'accept-language': 'de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7' } },
    response:
    { status: 404,
    message: 'Not Found',
    header: { vary: 'Origin', 'access-control-allow-origin': 'null' } },
     app: { subdomainOffset: 2, proxy: false, env: 'development' },
    originalUrl: '/devices/myDevice',
    req: '<original node req>',
    res: '<original node res>',
     socket: '<original node socket>' }
以及客户端:

fetch('http://localhost:3000/devices/myDevice',{
            method: 'PUT',
            data: "whatever"
        })
        .then(function(data){
            return data.json();
        }).then(function(res){
        })
        .catch(function(err) {
            console.log('Fetching myDevice Error:', err);
          });
执行此操作时,我的ctx如下所示:

// trivial stuff ommitted
router.put('/devices/myDevice',  (ctx, next) => {
    console.log('ctx:',ctx);
    ctx.body = "nothing in ctx which looks like my data: whatever"
    next();
});
ctx: { request:
{ method: 'PUT',
 url: '/devices/myDevice',
 header:
  { host: 'localhost:3000',
    connection: 'keep-alive',
    'content-length': '0',
    origin: 'null',
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) 
     AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 
     Safari/537.36',
    accept: '*/*',
    'accept-encoding': 'gzip, deflate, br',
    'accept-language': 'de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7' } },
    response:
    { status: 404,
    message: 'Not Found',
    header: { vary: 'Origin', 'access-control-allow-origin': 'null' } },
     app: { subdomainOffset: 2, proxy: false, env: 'development' },
    originalUrl: '/devices/myDevice',
    req: '<original node req>',
    res: '<original node res>',
     socket: '<original node socket>' }
ctx:{请求:
{方法:'PUT',
url:“/devices/myDevice”,
标题:
{host:'localhost:3000',
连接:“保持活力”,
“内容长度”:“0”,
来源:“空”,
“用户代理”:“Mozilla/5.0(Windows NT 10.0;Win64;x64)
AppleWebKit/537.36(KHTML,像Gecko)Chrome/67.0.3396.99
Safari/537.36',
接受:“*/*”,
“接受编码”:“gzip,deflate,br”,
“接受语言”:de de,de;q=0.9,en-US;q=0.8,en;q=0.7'},
答复:
{现状:404,
消息:“未找到”,
标题:{vary:'Origin','access control allow Origin':'null'},
app:{subdomainOffset:2,proxy:false,env:'development'},
originalUrl:“/devices/myDevice”,
请求:“”,
res:'',
套接字:'}
可以看到,我得到了404,但是路由被触发到console.log(ctx)。。。 我也看不到我试图发送到服务器的数据。 Cors标题设置为btw。 其他路径(如GET和DELETE)也可以正常工作


这是一个错误,还是任何人都可以重现所描述的行为?

如果您只想返回发送的数据,请使用
请求。正文
而不是
响应

ctx.body = ctx.request.body;
通常,将
PUT
请求与post请求一样处理


您还需要一个主体解析器中间件,例如
koabodyparser
()或
koabody
()。

正如您所提到的,这是
获取的一个问题。它接受选项中的
正文
属性(而不是
数据

用法示例:

fetch('http://localhost:3000/devices/myDevice', {
  method: 'PUT',
  body: JSON.stringify({ name: 'john', age: 30 })
})
  .then(function(data) {
    return data.json();
  })
  .then(function(res) {})
  .catch(function(err) {
    console.log('Fetching myDevice Error:', err);
  });

获取文档:

谢谢您的提示,但这不是我的问题。我编辑了这个问题以澄清问题。也许你还有别的想法。目前我认为这是一个取货问题。如果我使用Chrome应用程序ARC,我的服务器回答正确。@Dan-问题仍然不清楚。发送给您的有效负载将不在
ctx.body
中,而是在
ctx.request.body
中。看起来这是一个获取问题。$。ajax({url:'…',headers:{“data”:“foobar”}})用于请求服务器路由。