Koa conseguir solicitud POST

directorio

 

principio:

nota:

Ejemplo:


principio:

Para el procesamiento de la solicitud POST, koa2 ningún método para la adquisición de parámetros del paquete, necesidad de solicitar el req objeto mediante el análisis del contexto como los Node.js nativos, un datos de formulario de POST analiza en cadena de consulta (por ejemplo: a = 1 y b = 2 y c = 3), entonces analizar la cadena de consulta en formato JSON (por ejemplo .: { "a": "1", "b": "2", "c": "3"})

nota:

       ctx.request solicitud de objeto está encapsulado en el contexto, ctx.req node.js nativos es el objeto de la petición HTTP para proporcionar el contexto, un contexto mismo modo objeto de respuesta ctx.response después de la encapsulación, se proporciona contexto ctx.res node.js nativas solicitud HTTP objeto.

Ejemplo:

   

const Koa = require('koa')
const app = new Koa()

app.use( async ( ctx ) => {
    if ( ctx.url === '/' && ctx.method === 'GET' ) {
        // 当GET请求时候返回表单页面
        let html = `
      <h1>koa2 request post demo</h1>
      <form method="POST" action="/">
        <p>userName</p>
        <input name="userName" /><br/>
        <p>nickName</p>
        <input name="nickName" /><br/>
        <p>email</p>
        <input name="email" /><br/>
        <button type="submit">submit</button>
      </form>
    `
        ctx.body = html
    } else if ( ctx.url === '/' && ctx.method === 'POST' ) {
        // 当POST请求的时候,解析POST表单里的数据,并显示出来
        let postData = await parsePostData( ctx )
        ctx.body = postData
    } else {
        // 其他请求显示404
        ctx.body = '<h1>404!!! o(╯□╰)o</h1>'
    }
})
/**
 * 解析上下文里node原生请求的post参数
 * */

function parsePostData(ctx){
    return new Promise((resolve,reject)=>{
        try {
            console.log(ctx.req === ctx.request)
            let postData = '';
            ctx.req.addListener('data',(data)=>{
                postData += data;
            })
            ctx.req.addListener('end',()=>{
                let parseData = parseQueryStr(postData);
                resolve(parseData)
            })
        }catch (err) {
            reject(err)
        }
    })
}

/**
 * 将POST请求的参数字符串解析成json
 */

function parseQueryStr(queryStr) {
    console.log('queryStr',queryStr)
      let queryData = {};
      let queryStrList = queryStr.split('&');
      console.log(queryStrList);
      for(let [index,queryStr] of queryStrList.entries()){
          console.log(index,queryStr)
          let itemList = queryStr.split('=');
          queryData[itemList[0]] = decodeURIComponent(itemList[1]);
      }
      return queryData
}

app.listen(3000, () => {
    console.log('[demo] request post is starting at port 3000')
})

 

Publicado 31 artículos originales · elogios ganado 13 · Vistas a 10000 +

Supongo que te gusta

Origin blog.csdn.net/qq_38694034/article/details/105252080
Recomendado
Clasificación