Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么我的ExpressJS req.query不起作用?_Javascript_Html_Node.js_Ajax_Express - Fatal编程技术网

Javascript 为什么我的ExpressJS req.query不起作用?

Javascript 为什么我的ExpressJS req.query不起作用?,javascript,html,node.js,ajax,express,Javascript,Html,Node.js,Ajax,Express,我有一个NodeJS repl,它有一个输入、按钮和h1元素。当您按下按钮时,h1元素内部的HTML将替换为输入值。这是我的密码: index.js: const Database = require("@replit/database"); const db = new Database(); const http = require("http"); const fs = require("fs"); const express =

我有一个NodeJS repl,它有一个输入、按钮和h1元素。当您按下按钮时,h1元素内部的HTML将替换为输入值。这是我的密码:

index.js:

const Database = require("@replit/database");
const db = new Database();
const http = require("http");
const fs = require("fs");
const express = require("express");
const app = express();

app.use(express.static(__dirname + "/public"));

app.get("/ajaxcall", async function(req, res) {
// db.set("this works?", "it does").then(() => {console.log(db.get("this works?"))});
res.send(req.query.keyUse);
})

app.get('/:id', function(request, response){
   fs.readFile(`${request.url == '/ajaxcall' ? '/ajaxcall' : String(request.url).substring(1)}`, null, function(error, data) {
        if (error) {
            response.writeHead(404);
            response.write('File not found!');
        } else {
          response.writeHead(200, {'Content-Type': 'text/html'});
            response.write(data);
        }
        response.end();
    });
});

app.listen(8000);
// http.createServer(onRequest).listen(8000);
index.html:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
</head>
<body>
  <h1 id="replace">meep</h1>
  <input id="getkey">
  <button id="button" onclick="get()">get</button>

  <script>
    function get() {
      $.ajax({
        type: 'GET',
        url: `https://databasetest.aquarial.repl.co/ajaxcall?keyUse=${document.querySelector('#getkey').value}`,
        dataType: 'json',
      })
      .done(function (data) {
        console.log('Response:', JSON.stringify(data, "", 2));
        $('#replace').html(JSON.stringify(data, "", 2));
      })
      .fail(function (jqXJR, textStatus, err) {
        console.log('Error:', textStatus);
      })
    }
  </script>
</body>
</html>

文件
米普
得到
函数get(){
$.ajax({
键入:“GET”,
网址:`https://databasetest.aquarial.repl.co/ajaxcall?keyUse=${document.querySelector('#getkey').value}`,
数据类型:“json”,
})
.完成(功能(数据){
log('Response:',JSON.stringify(data,“,2));
$('#replace').html(JSON.stringify(data,“,2));
})
.失败(功能(jqXJR、文本状态、错误){
log('Error:',textStatus);
})
}
除了我按下“get”键,什么也没发生。我连一个错误都没有。为什么不呢?
这是一个cors错误,这意味着您的服务器不需要来自同一来源的请求。默认情况下,服务器不允许这种策略来保证服务器的安全,但是如果您想允许,可以将下面的代码添加到index.js中

app.use((请求、恢复、下一步)=>{
res.setHeader(“访问控制允许原点”,“*”);
res.setHeader(
“访问控制允许标头”,
来源,X请求,内容类型,接受,授权
);
res.setHeader(“访问控制请求头”,“x-requested-with”);//根据jquery文档,它只适用于此头。
res.setHeader(
“访问控制允许方法”,
“得到”
);
next();
});
当请求完全归档时,会出现一些解析错误,您可以解决发送JSON对象intead文本的问题

下面您可以找到这两个文件

index.js

const-Database=require(@replit/Database”);
const db=新数据库();
const http=require(“http”);
常数fs=要求(“fs”);
const express=要求(“express”);
常量app=express();
应用程序使用(express.static(uu dirname+“/public”);
应用程序使用((请求、恢复、下一步)=>{
res.setHeader(“访问控制允许原点”,“*”);
res.setHeader(
“访问控制允许标头”,
来源,X请求,内容类型,接受,授权
);
res.setHeader(“访问控制请求头”,“x-Request-with”);
res.setHeader(
“访问控制允许方法”,
“得到”
);
next();
});
app.get(“/ajaxcall”),异步函数(req,res){
//然后(()=>{console.log(db.get(“this works?”))});
res.send({msg:req.query.keyUse});
})
app.get('/:id',函数(请求、响应){
fs.readFile(`${request.url=='/ajaxcall'?'/ajaxcall':字符串(request.url).substring(1)}`,null,函数(错误,数据){
如果(错误){
书面答复(404);
write('File not found!');
}否则{
writeHead(200,{'Content-Type':'text/html'});
响应。写入(数据);
}
response.end();
});
});
app.listen(8000);
//http.createServer(onRequest).listen(8000);
index.html


文件
米普
得到
函数get(){
//log(document.querySelector('#getkey').value)
$.ajax({
键入:“GET”,
网址:`https://databasetest.aquarial.repl.co/ajaxcall?keyUse=${document.querySelector('#getkey').value}`,
数据类型:“json”,
})
.完成(功能(数据){
log('Response:',JSON.stringify(data,“,2));
$('#replace').html(data.msg);
})
.失败(功能(jqXJR、文本状态、错误){
log('Error:',textStatus);
})
}

没关系,我想出来了。AJAX被设置为接收JSON数据,而不是字符串。它需要像:

$.ajax({
        type: 'GET',
        url: `https://databasetest.aquarial.repl.co/ajaxcall?keyUse=${document.querySelector('#getkey').value}`,
        dataType: 'text',
      })

你能记录请求查询对象吗?