制作 Node.js api - 不同的需求

问题描述 投票:0回答:1

我不知道如何在客户提交表单后使代码向客户显示,也不知道如何使客户提交多个(多次)我想要这样:

---the form---
input 
input 
input
submit button

--here show the response--

并且客户端能够发送多次提交,并且响应如上所示。 它还给了我这个错误:

/home/runner/costalica/index.js:87
      })
        

SyntaxError: Unexpected end of input

这是我的代码:

const fetch = require('node-fetch');
const express = require('express');
const app = express();

// Parse request bodies
app.use(express.json());
app.use(express.urlencoded({
  extended: true
}));
app.listen(3000);
app.get('/', (request, response) => {
  let responseHTML = `
    <html>
      <body>
        <h1>Login Form</h1>
        <form method="POST" action="/">
          <label for="csrf_token">CSRF Token:</label> 
          <input type="text" name="csrf_token" id="csrf_token"><br>   
          
          <label for="email">Email:</label>  
          <input type="email" name="email" id="email"><br>
          
          <label for="password">Password:</label>  
          <input type="password" name="password" id="password"><br>
          
          <input type="submit" value="Submit">
        </form>
      </body>
    </html>
  `
  response.send(responseHTML)
})

app.post('/', (req, res) => {
      const {
        csrf_token,
        email,
        password
      } = req.body;

      const data = `{
    "_csrf_token": "${csrf_token}", 
    "email": "${email}", 
    "grant_type": "PWD", 
    "page": "AccountLogin", 
    "password": "${password}",
    "recaptchaResponse": null, 
    "recaptchaSiteKey": null, 
    "step": "password",
    "userDefaultedToPassword": false 
  }`;

      let reqq = fetch('https://scrapeninja.p.rapidapi.com/scrape', {
        method: 'POST',
        headers: {
          "Content-Type": "application/json",
          "x-rapidapi-host": "HIDDEN",
          "x-rapidapi-key": "HIDDEN"
        },
        body: JSON.stringify({
          "url": "https://www.wayfair.com/a/account/authentication/login",
          "method": "POST",
          "headers": [
            "authority: www.wayfair.com",
            "accept: application/json",
            "accept-language: en-US,en;q=0.9,ar;q=0.8",
            "content-type: application/json",
            "cookie: WFDC=DSM; CSNUtId=412864fc-a9f8-405c-8e19-aa56c086d7ea; ExCSNUtId=412864fc-a9f8-405c-8e19-aa56c086d7ea; vid=23e17d3a-64a8-81d9-9e3c-5c0227712302; SFSID=ed904601ed2bb197bcbf8d4f7643e8cc; canary=0; serverUAInfo=%7B%22browser%22%3A%22Google%20Chrome%22%2C%22browserVersion%22%3A114%2C%22OS%22%3A%22Windows%22%2C%22OSVersion%22%3A%2210%22%2C%22isMobile%22%3Afalse%2C%22isTablet%22%3Afalse%2C%22isTouch%22%3Afalse%7D; __px_jnfwwtr_5=disable; _pxhd=bytlkNG5QrgGWPC-1RImOXynN/cLl26bEP24UXFCHXT4He3u0Wh/mg3ui2mytf2n27lyNOZ85vc-lS7T36UIWw==:eLUfj4aK5RXvvmjDlAlCh8zSBU-3GpStZIT2o40y1HojI1D3p7xCH/aXJfZGO9TizTXeUiEBw5yVXmJFLaHL8fQYbI6z3V8rtEWJuu6zneo=; CSN_CSRF=c60cafb9043d3d61febb81a38d23ece011ecf59df63774332d8a1be0c401fe52; __cf_bm=OYuVFxcPmLDoUgBGpP7Nj78NQm5R.Jr7cK8ggEIR3Wo-1688764889-0-AejgIZQcufTBjfmr47Oi/soHVUy7JtWjQ0r9cSXFy8T+Rznig68CKCwIFVNcjBEv3llV7a66LjzOq8HiB9IQIac=; CSN=g_countryCode%3DUS%26g_zip%3D67346; CSNPersist=page_of_visit%3D5; _wf_fs_sample_user=true; ibb=1; CSNID=FCD55A66-8513-46C7-A656-C2C65BB20149; WFCS=CS9; g_state={\"i_p\":1688772129177,\"i_l\":1}; hideGoogleYolo=true",
            "origin: https://www.wayfair.com",
            "referer: https://www.wayfair.com/v/account/authentication/login?url=https%3A%2F%2Fwww.wayfair.com%2F&context=header_wayfair_my_account_menu",
            "sec-ch-ua: \"Not.A/Brand\";v=\"8\", \"Chromium\";v=\"114\", \"Microsoft Edge\";v=\"114\"",
            "sec-ch-ua-mobile: ?0",
            "sec-ch-ua-platform: \"Windows\"",
            "sec-fetch-dest: empty",
            "sec-fetch-mode: cors",
            "sec-fetch-site: same-origin",
            "sec-gpc: 1",
            "user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 Edg/114.0.1823.67",
            "x-auth-caller-context: auth_main_page_context",
            "x-csn-csrf-token: c60cafb9043d3d61febb81a38d23ece011ecf59df63774332d8a1be0c401fe52",
            "x-parent-txid: I+F9OmSoge50vzFQLI6HAg==",
            "x-requested-with: XMLHttpRequest"
          ],
          "data": data
        })
      });
      reqq.then(res => {
        const json = res.json();
        responseHTML += `<pre>${JSON.stringify(json, null, 2)}</pre>`
      })

javascript html node.js
1个回答
0
投票

您的 app.post 到处都缺少括号。

您可以通过删除自包含的对象直到获得正确的结构来找到哪个。例如

app.post('/', (req, res) => {
  const {
    csrf_token,
    email,
    password
  } = req.body;


  fetch('https://scrapeninja.p.rapidapi.com/scrape', { // no need to save 
    method: 'POST',
    headers: {
      "Content-Type": "application/json",
      "x-rapidapi-host": "HIDDEN",
      "x-rapidapi-key": "HIDDEN"
    },
    body: JSON.stringify({
      "url": "https://www.wayfair.com/a/account/authentication/login",
      "method": "POST",
      "headers": [......]
    }), // added
    "data": data
  }).then(res => { // added the then to the fetch
    const json = res.json();
    responseHTML += `<pre>${JSON.stringify(json, null, 2)}</pre>`
  })
})
© www.soinside.com 2019 - 2024. All rights reserved.