首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要使用express、我自己的url和AJAX调用检索数据

问需要使用express、我自己的url和AJAX调用检索数据
EN

Stack Overflow用户
提问于 2016-11-25 22:41:12
回答 2查看 483关注 0票数 0

我正在使用express从我的服务器检索数据。我有一个按钮,需要显示名称后点击,但它似乎不工作。我一直收到一个错误,该错误说“require”未定义,当我单击“搜索”按钮时,会收到一条错误消息:

jquery.js:9631 GET http://localhost:10000/ 发送“jquery.js:9631ajax”jquery.js:9176displayTurtles serverFS.js:35dispatch jquery.js:4641elemData.handle @ jquery.js:4309 index.html:1 XMLHttpRequest无法加载 http://localhost:10000/。请求的资源上没有“访问-控制-允许-原产地”标题。因此,原产地'null‘不允许访问。响应具有HTTP代码404.

我需要在HTML上的列表中显示海龟,之后还允许用户使用POST方法添加新的海龟对象。

server.js文件

代码语言:javascript
复制
var express = require('express');
var server = express();

server.get('/', function (req, res) {
      var turtles = {
      message: "success",
      data: [
        {
          name: "Raphael",
          favFood: "Pizza"
        },
        {
          name: "Leonardo",
          favFood: "Pizza"
        },
        {
          name: "Donatello",
          favFood: "Pizza"
        },
        {
          name: "Michelangelo",
          favFood: "Pizza"
        }
      ]
    };
      res.send(turtles)
})

server.listen(10000, function () {
  console.log('Example app listening on port 3000!')
})

serverFS.js文件

代码语言:javascript
复制
$(document).ready(function(){

    var turtleList = $('<ol class="theList">')
    $('.DTurtles').append(turtleList);

    $(document).on('click', '#show', displayTurtles);
});

function displayTurtles(){  

    var emptyArray = [];

    var myQueryUrl = "http://localhost:10000/" + turtleSearch;

    $.ajax({url: myQueryUrl, method: 'GET'}).done(function(response){

        var loopLength = response.data.length;
        var name;
        var food;
        for(var x = 0; x < loopLength; x++) {

            var emptyTurt = {};
            name = response.data[x].name;
            food =  response.data[x].favFood;

            emptyTurt.name = name;
            emptyTurt.food = food;

            emptyArray.push(emptyTurt);
        } 
        console.log(emptyArray)

    });
    console.log(emptyArray)

}

HTML文件

代码语言:javascript
复制
<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
    <div class="form">
        <form>
            <label for="search-input">Type Something</label><br>
            <input type="text" id="search-input"><br><br>
            <input id="show" type="button" value="For Emergencies Only">
        </form>
    </div>
    <div class="DTurtles">
    </div>

<script src="https://code.jquery.com/jquery.js"></script>

<script type="text/javascript" src="serverFS.js"></script>
</body>
</html>

编辑:我是否需要对server.js文件中的get函数进行具体说明?我在快报网站上看到,关于路线参数,请注意:

代码语言:javascript
复制
Route path: /users/:userId/books/:bookId
Request URL: http://localhost:3000/users/34/books/8989
req.params: { "userId": "34", "bookId": "8989" }
EN

回答 2

Stack Overflow用户

发布于 2016-11-25 22:45:42

我一直收到一个错误,上面写着“require”没有定义

显然,server.js被设计为通过Node.js运行,而不是嵌入到网页中。

响应具有HTTP状态代码404。

URL正在抛出404错误。

假设您通过server.js运行Node.js (除了尝试在浏览器中直接运行它,但失败了),这可能是因为您在搜索框中键入了turtles以外的其他内容。/turtles是服务器设置为运行的唯一URL。

票数 0
EN

Stack Overflow用户

发布于 2016-11-25 22:48:17

您的server.js文件是为在您自己的服务器上运行node.js而设计的。它不会在浏览器中的网页中运行。

因此,不能在网页中这样做:

代码语言:javascript
复制
<script type="text/javascript" src="server.js"></script>

相反,您必须使用node.js运行该文件,如下所示:

代码语言:javascript
复制
node server.js

而且,如果您在正确的主机上这样做,那么您就可以从您的网页中通过Ajax调用访问该服务器。

注意:浏览器对进行Ajax调用实施相同的起源限制,因此您必须将网页和ajax调用放在相同的来源(例如,从您的express服务器服务web页面并从那里在浏览器中加载它),或者您必须在您的快递服务器中启用CORS,这样它将告诉浏览器跨源请求是可以的。

如果您只想为单个网页添加一条路由,您可以这样做:

代码语言:javascript
复制
app.get("/index.html", function(req, res) {
    res.sendFile("/somePath/index.html");
});

然后,您将以http://localhost:10000/index.html的形式加载网页。

如果您试图为许多网页添加一条路由,那么您将把它们全部放在一个公共目录中,并使用 middleware。

代码语言:javascript
复制
app.use(express.static(path.join(__dirname, "someDirectoryName"));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40813051

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档