1

我正在用 NuxtJS 练习 ExpressJS。我期待从axiosPOST 请求中获取数据,但在req.bodyand上总是空着req.params。以下是我的配置和片段

nuxt.config.js

...
serverMiddleware: [
    { path: '/api', handler: '~/api/index.js' }
],
...

api/index.js

const express = require('express')

// Create express instance
const app = express()

// Require API routes
const staticDeploy = require('./routes/static-deploy')

// Import API Routes
app.use(staticDeploy)

// Export express app
module.exports = app

// Start standalone server if directly running
if (require.main === module) {
  const port = process.env.PORT || 3001
  app.listen(port, () => {
    console.log(`API server listening on port ${port}`)
  })
}

api/routes/static-deploy.js

const { Router } = require('express')
var CryptoJS = require('crypto-js')

const router = Router()

router.post('/static-deploy', (req, res) => {
  console.log('req: ' + req.url)  // Returns "req: /static-deploy/"
  console.log('req: ' + req.body)  // Returns "req: undefined"
  console.log('req: ' + JSON.stringify(req.params))  // Returns "req: {}"
  console.log('req headers: ' + JSON.stringify(req.headers))  // Returns "req headers: {"accept":"application/json, text/plain, */*","content-type":"application/json;charset=utf-8","user-agent":"axios/0.19.2","content-length":"12","host":"localhost:3000","connection":"close"}"
  const STATIC_DEPLOY_AUTH = {
    username: 'virus',
    password: 'pass1234',
    secret: 'utf81234'
  }
  var bytes = CryptoJS.AES.decrypt(req.body, STATIC_DEPLOY_AUTH.secret)
  var decryptedBody = bytes.toString(CryptoJS.enc.Utf8)
  if (
    decryptedBody.username === STATIC_DEPLOY_AUTH.username &&
    decryptedBody.password === STATIC_DEPLOY_AUTH.password
  ) {
    console.log('Authentication successful')
    res.send('Ok')
  }
})

module.exports = router

节点 CLI 命令

const CryptoJS = require('crypto-js')
const axios = require('axios')


const ciphertext = CryptoJS.AES.encrypt(
    '{"username": "virus", "password": "pass1234"}',
    'utc81234'
  ).toString()
axios.post('http://localhost:3000/api/static-deploy/', ciphertext).catch(error => {
    console.log('Error: ' + error)
})
4

1 回答 1

1

修复方法是在api/index.js中添加以下代码段:

app.use(express.json())
app.use(express.urlencoded({ extended: true }))

https://aslamdoctor.com/blog/simple-crud-app-using-express-nuxtjs-using-servermiddleware-part-1-2/239中所述

于 2020-08-14T04:17:57.983 回答