向NodeJS后端发布请求

时间:2017-04-28 15:19:41

标签: javascript jquery json node.js

我目前正在尝试发布 json数据到json文件。为了做到这一点,我已经设置了NodeJS并表达了服务器,但是有些事情一直在搞乱。我一直收到这个反馈:

  

jquery-3.2.1.js:9566 POST http://localhost:3000/Alpha/json/details.json 404(未找到)

我读了几个其他问题,说明问题可能在我的服务器端脚本中,而且我没有正确指定 json 文件。

JS Client Side Post脚本:

function sendFormData(){
            var formData = JSON.stringify($("#myForm").serializeArray());

            $.ajax({
                type: "POST",
                url:"../json/details.json",
                data: formData,
                success: function(){
                    alert("something!");
                }
            });
        } 

我的HTML表单:

<form action="XXXXXXXX"id="myForm"><label for="id">ID</label>
    <input type="text" id="id" name="id" placeholder="Item ID number" ng-model="newDetails.id">

       <label for="system">System</label>
       <input type="text" id="system" name="lastname" placeholder="Type of System" ng-model="newDetails.system">

       <label for="date">Date</label>
       <input type="text" id="date" name="lastname" placeholder="dd-mm-yyyy"  ng-model="newDetails.date">

       <label for="priority">Priority</label>
       <select id="priority" name="priority" ng-model="newDetails.priority">
         <option value="high">High</option>
         <option value="medium">Medium</option>
         <option value="low">Low</option>
        </select>
        <label for="description">Description</label>
        <textarea class="form-control" rows="3" id="desc" name="description" ng-model="newDetails.description"></textarea>

        <label for="priority">Status</label>
        <select id="status" name="status" ng-model="newDetails.status">
          <option value="OPEN">OPEN</option>
          <option value="ON HOLD">ON HOLD</option
          <option value="CLOSED">CLOSED</option>
        </select>

       <input type="button" value="Submit" class="btn" data-dismiss="modal" style="background-color:#FFBE00; color:#002244;" onClick="sendFormData()">
</form>

NodeJS脚本:

    var express = require('express');
    var app = express();
    var bodyParser = require('body-parser');
    var path = require('path');

    app.use(bodyParser.json());
    app.use('../json', express.static(path.join(__dirname, 'json')));
    app.use('/', express.static(__dirname + '/'));


    app.post('/formdata', function(req, res) {
        console.log( req.body.id + req.body.system + req.body.date + req.body.priority + req.body.description + req.body.status);
        res.send("ok");
    });

    app.use(bodyParser.json());

    // Get information submitted
    app.post('/', function(req, res) {
        console.log("Information received !");
        console.log(req.body);
        res.send("Ok!");
    });

app.listen(3000);

我的Node Script是否正常工作?为什么我找不到json文件?

root / Alpha / json / details.json - 是json文件路径

我的节点脚本位于根目录

1 个答案:

答案 0 :(得分:1)

我看到你对这里的许多事情感到困惑。在您能够理解如何修复代码之前,我认为您应该退一步了解绝对和相对URL。关于如何修复它的建议如下,但如果你盲目地应用这些建议,它将无济于事。你需要学习为什么你需要做下面的事情,否则你以后会面临更多的问题。阅读有关URL,路径和HTTP的信息:

至少阅读有关如何构建绝对和相对URL的基本信息,在HTTP请求中作为路径发送的内容,如何遍历文件系统以及/..和{{1意思是。

现在,解决方案。

这没有任何意义:

.

因为您无法提供根路径上一级的网址。

当您在某个网页上时,如果您从客户端访问 app.use('../json', express.static(path.join(__dirname, 'json'))); ,例如../x/y.json然后客户端要求的内容实际上是http://www.example.com/a/b/c/index.html是您需要在后端提供的内容。你实际服务的文件是一个不同的故事,但这是你需要服务的路线。

我认为你需要重新思考:

  1. http://www.example.com/a/b/x/y.json...在相对网址中的含义
  2. 您要提供的实际网址 - 除了您的客户和服务器必须同意之外,它可以是任何内容
  3. 有意义的是:

    /

    但是如果你提供app.use('/json', express.static(path.join(__dirname, 'json'))); 并且它已经包含__dirname目录,那将是多余的:

    json

    顺便说一句,上面可能只是:

    app.use('/', express.static(__dirname + '/'));
    

    但不建议(并且需要)提供后端文件。您应该将所有静态内容放在一个目录中,例如称为app.use('/', express.static(__dirname)); staticpublic或其他任何内容,并通过以下方式提供此目录:

    html

    并将您的app.use('/', express.static(path.join(__dirname, 'static'))); 目录放在该目录的中。

    有关如何正确提供静态内容的详细信息和示例,请参阅以下答案: