我想了解express以及它如何处理路线。
我设置了具有以下结构的域名
/
app.js
/public_html
index.html
在app.js中,我设置了我的快速服务器:
let app = express();
app.post('/list', (request, response) => {
//get data then...
response.send(data)
});
app.use(express.static('public_html'))
app.listen(3000, function(){
console.log('listening');
});
我使用node app.js
然后,在public_html目录的index.html
中,我正在尝试请求数据。我只是做了一个简单的事情:
fetch('/list').then(function(response) {
console.log(response)
})
但我得到404作为回应。
我对一些事情感到有些困惑:
默认情况下,我的Web服务器(Apache / Ubuntu)设置为从public_html目录中提供html。这是否意味着我需要将整个节点应用程序结构移动到public_html文件夹中,并将实际的html移动到static
文件夹中?
港口怎么样?节点应用程序侦听端口3000 - 但我不确定如何(或是否)专门向该端口发出请求。
路径路径 - 我发布到/list
但应该是../list
吗?
我还没有找到适用于此应用的配置。任何帮助,将不胜感激。
答案 0 :(得分:3)
使用以下代码。使用ajax而不是fetch,方法必须是POST。由于默认情况下获取请求,因此提取无法正常工作。
选项1
$.ajax({
method: "POST",
url: "/list"
})
.done(function( msg ) {
alert( "Data " + msg );
});
选项2 仅在代码后更改=> POST到GET
app.get('/list', (request, response) => {
//get data then...
response.send(data)
});
选项3 在提取中使用POST
fetch("/list",
{
method: "POST"
})
.then(function(data){ alert( "Data " + data ); })
感谢@ vesse建议选项3
https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch
答案 1 :(得分:1)
默认情况下,我的Web服务器(Apache / Ubuntu)设置为从public_html目录中提供html。这是否意味着我的整个节点应用程序结构需要移动到public_html文件夹中,而实际的html是否会移动到静态文件夹中?
Node.js和Apache可以使用相同的静态文件夹而不会发生冲突,但它们都无法在同一端口上侦听。您的Apache服务器可能已经在端口80上运行。如果您的Node.js服务器在端口3000上运行,对端口80的请求将与您在应用程序中写入的路由不匹配,因此404将返回(除非您具有相同的单独的Apache托管应用程序中的路由。)
港口怎么样?节点应用程序侦听端口3000 - 但我不确定如何(或是否)特别向该端口发出请求。
由于Apache可能已经在端口80上侦听,因此您发送给http://localhost的任何请求都将命中您的Apache服务器。相反,您必须发出包含端口号的请求,http://localhost:3000将命中您的Node.js服务器。
路径路径 - 我发布到/ list但是应该是../list吗?
不,您应该发布到/列表,并且还要考虑Rakesh在他的回答中做出的所有要点,以便您正确地将POST与POST从客户端匹配到服务器或切换到GET,如果这更合适的话。与第二点一样,请确保您要发布到http://localhost:3000而不只是http://localhost。正如您所指出的,一个是Apache,另一个是Node.js
最后,这是我从应用程序脚本旁边的文件夹提供的静态服务器代码行:
app.use('/', express.static(__dirname + '/public_html'));
这样,您放在public_html文件夹中的所有文件都可以在您的应用程序中导航,其中包括Apache相关的所有内容。注意__dirname
始终是运行当前正在执行的脚本的目录。要访问此网站,只需转到浏览器中的http://localhost:3000即可看到您的索引文件。