首页 > 解决方案 > Node.js 上的 POST 方法不适用于使用 express 的 Replit 服务器

问题描述

我是后端新手,我在 Replit 服务器中使用 Node.js 和 express 来部署文件应用程序:

但是,当我尝试执行帖子时,什么也没有发生!

    var express = require('express');
    var fs = require('fs');
    const bodyParser = require('body-parser');

    var app = express();

    // Middlewares 
    app.use(express.static('public'));
    app.use(bodyParser.urlencoded({ extended: false }));

    app.post('/foo.json', function (req, res) {
        console.log("It doesn't work!");
    });

我想做的就是通过 express 的 POST 方法将从 index.html 收集的数据保存到 .json 中(我不确定这是不是最好的方法)。我能做些什么?

标签: javascriptnode.jsexpress

解决方案


上面的代码不是用来发出请求的

   app.post('/foo.json', function (req, res) {
        console.log("It does not work");
    });

这意味着您正在接受请求http://your_url/foo.json

它是一个端点。

对于您要执行的操作,您必须使用xhr或类似的库从前端发出请求axios

# Axios CDN:
<script src="https://cdnjs.cloudflare.com/ajax/libs/axios/0.21.1/axios.min.js" integrity="sha512-bZS47S7sPOxkjU/4Bt0zrhEtWx0y0CRkhEp8IckzK+ltifIIE9EMIMTuT/mEzoIMewUINruDBIR/jJnbguonqQ==" crossorigin="anonymous"></script>

axios.post('http://localhost:3002/foo', {
  data: 'your_data_goes_here'
})

您的后端代码应该是

const express = require('express');
const fs = require('fs');
const bodyParser = require('body-parser');

const app = express();

const PORT = 3002;

// Middlewares 
app.use(express.static('public'));
app.use(bodyParser.urlencoded({ extended: false }));

app.post('/foo', (req, res) => {
    console.log(req.body.data);
});

app.all('*', (req, res, next) => {

    //  CORS
    res.setHeader('Access-Control-Allow-Origin', '*');
    //  Request headers you wish to allow
    res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With');
    res.setHeader('Access-Control-Allow-Headers', 'Content-Type');
    //  Request methods you wish to allow
    res.setHeader('Access-Control-Allow-Methods', 'GET','POST', 'OPTIONS');

    next();
});

// Start the app
app.listen(PORT, () => {
    console.log(`Server is listening on port ${PORT}`);
});

推荐阅读