nodejs 如何区分与实现不同的请求

我在做一个基于nodejs+HTML+javascript+mysql 增删改查的小项目练习,我的问题是:1.我的登录页面login.html登录成功会调用(备注为//用户登录的请求),然后res.redirect('/index.html?'+username)页面,现在我在index.html想用按钮实现ajax查询(xhr.open('这里该用何种请求,我的put已经用了一次,get用不了了,因为登录会用到app.get('/index.html'),post也用了(app.post('/index.html),我该怎么办),在index.html页面我已经用了ajax去判断username存不存在(xhr.open('put','index.html',true),我这里已经用了put方法),存在就不能再添加了(备注为//型号查询存不存在,ajax实现,当文本框onblur时调用,我现在想再来一个按钮事件 AJAX查询,查询还是在index.html,我该怎么做,第二个问题,我该怎么在login.html页面得到登录失败,而不是跳转到新页面得到失败信息
我问的不是ajax请求问题,而是怎么在nodejs里面,对于我的Index.html页面俩种不同的请求(丢失文本框,我提交的是index.html,我想实现查询,也是Index.html),但是都是请求的index.html,假如都是get,post,或者我在Nodejs里面怎么去做区分哪个是哪个?

'use strict';
var bodyParser = require('body-parser');
var urlencodedParser = bodyParser.urlencoded({ extended: false })
var express=require('express');
var http=require('http');
var fs=require('fs');
const path = require('path');
var app=express();

var mysql=require('mysql');
var pool=mysql.createPool({
    host:'127.0.0.1',
    port:'3306',
    database:'checklist',
    user:'root',
    password:'admin',
});


app.get('/index.html',function(req,rsp){
    rsp.sendFile(__dirname+'/index.html');
});


app.get('/login.html',function(req,rsp){
    rsp.sendFile(__dirname+'/login.html');
});



//提交表单的请求,插入数据
var cnt = 0;
app.use(express.static(path.join(__dirname, 'public')));
app.post('/post',urlencodedParser,function(req,res){
    var addSql = 'INSERT INTO info(jobname,createTime,maker,makeyes,makeno,makerNote) VALUES(?,?,?,?,?,?)';
    var addSqlParams=new Array(5);    
    addSqlParams[0] = req.body.jobname;
    addSqlParams[1] = req.body.createTime;
    addSqlParams[2] = req.body.maker;
    addSqlParams[3] = req.body.makeyesinp;
    addSqlParams[4] = req.body.makenoinp;    
    addSqlParams[5] = req.body.makeNote;    
    console.log("req.body.makeyesinp" + req.body.makeyesinp);
    pool.getConnection(function(err,connection){
        if(err){
              res.send('Can not connect to MySql DB');
              console.log(err);
        }else{
            
               var data= {result:true,
                          msg:'提交成功'}; 
               connection.query(addSql,addSqlParams,function (err, result) {
                   if(err){
                       //插入失败,返回错误信息
                        console.log('[INSERT ERROR] - ',err.message);
                        res.end(err.message+" ");
                        
                        
                    }else{
                        //插入成功则返回时间+success
                        console.log('insert success!');
                        res.end(JSON.stringify(data));
                    }
             
             
                });
               cnt = cnt + 1;
                console.log('insert success!');
                res.end('success');
        }
    });    
});

//用户登录的请求
app.post('/index.html',urlencodedParser,function(req,res){
        console.log("start...");
        var val = req.body;
        var username = val.username;
        var userpwd = val.userpwd;
        console.log("username" + username);

        pool.getConnection(function(err,connection){
            if(err){
                res.send('Can not connect to MySql DB');
                console.log(err);
            }else{

                var str;
                var arr="false";                
                connection.query("select * from user where username = ? and password = ? ",[username,userpwd],function(err,result){
                    if(err){
                        str='Search failed';
                    }else if ( result.length > 0){
                        str="Search succeed";
                        console.log(result);
                        res.redirect('/index.html?'+username);
    
                    }else{
                        
                            res.redirect('/login.html');
                        //res.end(JSON.stringify(arr));
                    }
                })
            }
        });

});








//型号查询存不存在,ajax实现,当文本框onblur时调用
app.put('/index.html',function(req,res){
    req.on('data',function(data){
        var obj=JSON.parse(data.toString());// 取得Ajax提交的参数
        console.log(obj);
        pool.getConnection(function(err,connection){
            if(err){
                res.send('Can not connect to MySql DB');
                console.log(err);
            }else{
                var str;
                var arr=[];                
                connection.query("select jobname from info where jobname = ? ",obj.name,function(err,result){
                    if(err){
                        str='Search failed';
                    }else{
                        str="Search succeed";                                        
                    }
                    console.log(str);
                    console.log("select result.length="+result.length);

                        for (var i=0; i<result.length; i++) {          
                            var tmp = result[i];
                            var emp=new Object;
                            emp.jobname=tmp['jobname'];
                            //emp.name=tmp['username'];
                            //emp.password=tmp['password'];
                            //emp.type=tmp['type'];
                            //console.log("type is"+emp.type);
                            arr.push(emp);
                        } 
                        console.log(arr.length);
                        connection.release();
                        res.send(JSON.stringify(arr));                        
                })
            }
        });
    });
});

app.listen(8001, () => {
    console.log('server listening at port 8001')
});

问题一:在index.html页面,如果你已经使用了PUT和POST请求,并且你还想使用AJAX进行查询,你可以使用DELETE请求。在Node.js中,你可以使用app.delete()方法来处理DELETE请求。例如,你可以使用以下代码:

app.delete('/index.html', function(req, res) {
    // 处理DELETE请求的逻辑
});

在index.html页面中,你可以使用以下代码来发送DELETE请求:

xhr.open('DELETE', 'index.html', true);
xhr.send();

问题二:如果你想在login.html页面中得到登录失败的信息,而不是跳转到新页面,你可以使用AJAX进行登录验证。在Node.js中,你可以使用app.post()方法来处理登录请求,并返回相应的结果。例如,你可以使用以下代码:

app.post('/login', function(req, res) {
    // 验证登录逻辑
    if (/* 登录成功 */) {
        res.redirect('/index.html?' + req.body.username);
    } else {
        res.json({ success: false, message: '登录失败' });
    }
});

在login.html页面中,你可以使用以下代码来发送登录请求,并处理结果:

xhr.open('POST', 'login', true);
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.send(JSON.stringify({ username: 'your_username', password: 'your_password' }));
xhr.onload = function() {
    if (xhr.status === 200) {
        var response = JSON.parse(xhr.responseText);
        if (response.success) {
            // 登录成功,进行页面跳转
        } else {
            // 登录失败,显示错误信息
            alert(response.message);
        }
    } else {
        // 请求错误处理
    }
};

试一试这样

首先,你可以使用GET请求来获取数据。在AJAX中,你可以使用以下代码:

javascript
xhr.open('GET', '/index.html?' + username, true);
在这里,你可以将查询字符串添加到URL中,以便从服务器获取特定用户的数据。

另外,如果你想在index.html页面上使用DELETE请求来删除数据,你可以使用以下代码:

javascript
xhr.open('DELETE', '/index.html?' + username, true);
这样,你可以通过添加查询字符串来指定要删除的用户,并在服务器端处理DELETE请求以删除相应的数据。

请注意,在使用GETDELETE请求时,确保在服务器端正确处理这些请求,并返回适当的响应

问题一:由于你已经使用了PUT和POST请求,你可以尝试使用DELETE请求进行ajax查询。你可以使用以下代码:

xhr.open('DELETE', '/index.html', true);

然后,在你的服务器端代码中,你需要添加对应的DELETE请求处理程序,例如:

app.delete('/index.html', function(req, res) {
    // 在这里处理DELETE请求
});

问题二:如果你想在login.html页面中得到登录失败的信息,而不是跳转到新页面,你可以使用AJAX进行登录请求,而不是使用表单提交。这样,你可以在登录请求完成后,根据响应结果来决定是否跳转页面或显示错误信息。例如:

$.ajax({
    url: '/login',
    type: 'POST',
    data: {
        username: $('#username').val(),
        password: $('#password').val()
    },
    success: function(data) {
        if (data.success) {
            // 登录成功,跳转页面
            window.location.href = '/index.html?' + data.username;
        } else {
            // 登录失败,显示错误信息
            $('#error-message').text(data.message);
        }
    }
});

在这个例子中,当登录按钮被点击时,我们使用jQuery的$.ajax方法发送一个POST请求到服务器的/login路径,并将用户名和密码作为数据发送。在请求成功后,我们根据服务器返回的data对象中的success属性来决定是否跳转页面或显示错误信息。如果success为true,我们跳转页面;否则,我们将错误信息显示在#error-message元素中。

因为我的删除功能还没做,我的delete肯定不能在这里用了, 就是 怎么区分 put的不同请求(app.put('/index.html'....这里面怎么去区分是丢失文库框焦点的请求,还是查询的请求呢?)

对于第一个问题,如果在index.html页面想要使用按钮实现AJAX查询,可以使用GET请求。具体代码如下

var xhr = new XMLHttpRequest();
xhr.open('GET', '/index.html', true);
xhr.onreadystatechange = function() {
    if (xhr.readyState === 4 && xhr.status === 200) {
        // 处理返回的数据
        var response = JSON.parse(xhr.responseText);
        // 进行相应的操作
    }
};
xhr.send();

对于第二个问题,可以在login.html页面得到登录失败的信息,而不是跳转到新页面来获得。你可以在登录失败的情况下,将信息返回给前端页面,然后使用JavaScript来处理这些信息。具体代码如下

// 登录失败的情况下
res.status(401).send('登录失败');

// 前端页面通过ajax接收返回的数据
xhr.onreadystatechange = function() {
    if (xhr.readyState === 4) {
        if (xhr.status === 200) {
            // 登录成功
        } else if (xhr.status === 401) {
            // 登录失败,处理错误信息
            var errorMessage = xhr.responseText;
            // 进行相应的操作
        }
    }
};


注意,这只是示例!!!!
现实情况你肯定需要改,也可以私发我

  • 其实同一个页面发出的ajax请求不需要域名后面的资源url完全一致,只需要保证host:port一样就不会跨域,你完全可以发/getuser这种请求,这才是目前开发时使用的请求命名逻辑
  • 后端需要对请求进行处理,比如接收到/getuser需要匹配执行对应的回调,这个叫做让后端来路由,用koa或express之类的框架,几行代码就实现这个回调,函数大概类似于下面,框架会帮你监听到/getuser这种请求自动跳转执行func函数。
    app.on('/getuser', func)
    

【以下回答由 GPT 生成】

问题1: 为了区分不同请求,可以根据请求方式(GET、POST、PUT等)来判断。

在登录页面的登录请求中,可以使用app.post('/login')来处理登录请求,而在index页面中的查询请求,可以使用app.get('/index')来处理查询请求。

例如,在你的代码中可以这样修改:

app.post('/login', urlencodedParser, function(req, res){
    // 处理登录请求逻辑
});

app.get('/index', function(req, rsp){
    // 处理查询请求逻辑
    rsp.sendFile(__dirname + '/index.html');
});

问题2: 在index.html页面中添加按钮事件,当文本框失去焦点时调用AJAX查询,可以使用JavaScript的onblur事件来触发AJAX查询。

例如,你可以在index.html页面中的文本框上添加onblur="queryData()",然后定义一个queryData函数来发送AJAX查询请求。

<input type="text" id="username" onblur="queryData()" />

<script>
    function queryData() {
        var username = document.getElementById('username').value;

        var xhr = new XMLHttpRequest();
        xhr.open('put', 'index', true);
        xhr.setRequestHeader('Content-Type', 'application/json');

        xhr.onreadystatechange = function () {
            if (xhr.readyState === 4 && xhr.status === 200) {
                // 处理查询结果的逻辑
                var response = JSON.parse(xhr.responseText);
                if (response.exists) {
                    alert('用户名已存在');
                }
            }
        };

        xhr.send(JSON.stringify({username: username}));
    }
</script>

问题3: 要在login.html页面获取登录失败的信息,可以使用session或cookie来保存登录状态。

具体做法是,在登录时根据登录结果将错误信息保存到session或cookie中,然后在login.html页面根据session或cookie中的错误信息进行展示。

例如,登录时可以修改登录的处理逻辑,在登录失败时将错误信息保存到session或cookie中,然后跳转到login.html页面。

app.post('/login', urlencodedParser, function(req, res){
    // 处理登录请求逻辑
    if (loginSuccess) {
        // 登录成功
        res.cookie('errorMessage', null);
        res.redirect('/index.html');
    } else {
        // 登录失败
        res.cookie('errorMessage', '登录失败,请输入正确的用户名和密码');
        res.redirect('/login.html');
    }
});

在login.html页面的相关位置,可以添加代码来获取并展示错误信息。

var errorMessage = '<%= errorMessage %>';
if (errorMessage) {
    // 展示错误信息的逻辑
}

请注意,上述代码中的关键部分需要根据你的具体环境和需求进行适当修改和适配。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

使用app.post和app.get来区分

结合GPT给出回答如下请题主参考
在基于 Node.js 的应用程序中,可以通过使用不同的 HTTP 方法(如 GET、POST、PUT、DELETE 等)和 URL 路径来区分和实现不同的请求。通常,许多框架和库(如 Express、Koa)提供了更方便的方法来处理 HTTP 请求和响应。

对于您的特定问题,您可以在 Node.js 后端使用路由来处理不同的请求。例如,在以下示例中,我们可以定义一个用于处理用户登录请求的路由:

const express = require('express');
const app = express();

// 定义处理用户登录请求的路由
app.post('/login', (req, res) => {
  // 处理登录请求的业务逻辑
  // 在这里发送响应
  res.send('用户登录成功');
});

// 启动服务器
app.listen(3000, () => {
  console.log('服务器已启动');
});

在这个例子中,我们定义了一个处理 POST 请求并使用 /login 路径的路由。当收到此类型的请求时,Node.js 将调用我们的回调函数并执行我们编写的业务逻辑。在这个示例中,我们发送了一个包含 用户登录成功 文本的响应。

当然,您可以根据需要定义其他路由来处理其他类型的请求(如 GET、PATCH、DELETE 等),并在其中执行不同的操作。

希望这可以帮助您更好地理解如何实现不同类型的 HTTP 请求以及如何在 Node.js 中使用路由。

以下是修改后的服务器端代码:

// 输入框失去焦点时的查询请求
app.put('/checkBlur', function (req, res) {
    // 处理输入框失去焦点时的查询逻辑
    // ...
});

// 按钮点击时的查询请求
app.put('/checkButton', function (req, res) {
    // 处理按钮点击时的查询逻辑
    // ...
});


如果你想在登录失败时在login.html页面上显示失败信息,你可以在服务器端处理登录失败的逻辑,并通过AJAX请求将失败信息发送回客户端,然后在login.html页面上显示该信息。你可以通过以下步骤来实现:
在服务器端,在登录失败的情况下,创建一个包含失败信息的JSON响应。
在客户端的login.html页面上,使用AJAX请求来发送登录请求,并处理服务器的响应。
如果服务器响应包含失败信息,将该信息显示在页面上,以告知用户登录失败。

参考gpt4:
结合自己分析给你如下建议:
首先,你的问题是如何在 nodejs 里面区分不同的请求,比如你想用 ajax 查询 index.html 页面,但是你已经用了 put 和 post 方法来处理其他的请求。其实,你可以使用不同的路由来区分不同的请求,而不是都用 index.html 作为请求地址。比如说,你可以用 /query 来处理查询请求,用 /insert 来处理插入请求,用 /update 来处理更新请求,用 /delete 来处理删除请求。这样,你就可以在 app.js 文件中定义不同的路由处理函数,根据不同的方法和地址来响应不同的请求。例如:

// 查询请求 app.get(‘/query’, function(req, res) { // 从 req 中获取查询参数 // 从数据库中查询数据 // 把数据返回给客户端 });

// 插入请求 app.post(‘/insert’, function(req, res) { // 从 req 中获取表单数据 // 把数据插入到数据库中 // 把结果返回给客户端 });

// 更新请求 app.put(‘/update’, function(req, res) { // 从 req 中获取更新数据 // 把数据更新到数据库中 // 把结果返回给客户端 });

// 删除请求 app.delete(‘/delete’, function(req, res) { // 从 req 中获取删除条件 // 把数据从数据库中删除 // 把结果返回给客户端 });

这样,你就可以在 index.html 页面中使用 ajax 发送不同的请求地址和方法,比如:

// 查询按钮点击事件 function query() { // 创建 XMLHttpRequest 对象 var xhr = new XMLHttpRequest(); // 设置请求方法和地址 xhr.open(‘get’, ‘/query?jobname=’ + jobname, true); // 设置响应类型为 json xhr.responseType = ‘json’; // 设置响应事件 xhr.onload = function() { if (xhr.status === 200) { // 获取响应数据 var data = xhr.response; // 处理响应数据 … } }; // 发送请求 xhr.send(); }

// 插入按钮点击事件 function insert() { // 创建 XMLHttpRequest 对象 var xhr = new XMLHttpRequest(); // 设置请求方法和地址 xhr.open(‘post’, ‘/insert’, true); // 设置请求头为表单类型 xhr.setRequestHeader(‘Content-Type’, ‘application/x-www-form-urlencoded’); // 设置响应类型为 json xhr.responseType = ‘json’; // 设置响应事件 xhr.onload = function() { if (xhr.status === 200) { // 获取响应数据 var data = xhr.response; // 处理响应数据 … } }; // 获取表单数据 var formData = …; // 发送请求 xhr.send(formData); }

// 更新按钮点击事件 function update() { … }

// 删除按钮点击事件 function delete() { … }

这样,你就可以实现不同的增删改查功能,并且在 nodejs 中区分不同的请求。

其次,你的问题是如何在 login.html 页面得到登录失败的信息,而不是跳转到新页面得到失败信息。其实,你可以使用 ajax 来发送登录请求,而不是直接提交表单。这样,你就可以在客户端接收到登录成功或失败的信息,并且根据信息做相应的处理。比如说,你可以用以下的代码来实现:

// 登录按钮点击事件 function login() { // 创建 XMLHttpRequest 对象 var xhr = new XMLHttpRequest(); // 设置请求方法和地址 xhr.open(‘post’, ‘/index.html’, true); // 设置请求头为表单类型 xhr.setRequestHeader(‘Content-Type’, ‘application/x-www-form-urlencoded’); // 设置响应类型为 json xhr.responseType = ‘json’; // 设置响应事件 xhr.onload = function() { if (xhr.status === 200) { // 获取响应数据 var data = xhr.response; // 判断登录是否成功 if (data.result) { // 登录成功,跳转到 index.html 页面 window.location.href = ‘/index.html?’ + data.username; } else { // 登录失败,显示错误信息 alert(data.msg); } } }; // 获取用户名和密码 var username = …; var userpwd = …; // 发送请求 xhr.send(‘username=’ + username + ‘&userpwd=’ + userpwd); }

这样,你就可以在 login.html 页面中使用 ajax 发送登录请求,并且根据响应数据做相应的处理。

node.js中HTTP不同请求方法的处理(GET,POST),如何获取GET,POST请求中的参数


node.js根据不同请求路径返回不同数据详解流程_JavaScript_脚本宝典 目录1.学习根据不同的请求路径返回:不同数据2.发送的数据:数据类型,和什么编码:Content-Type3.关于读入文件的:相对路径和绝对路径:4.读图片1.学习根据不同的请求路径返回:不同数据 http://www.js-code.com/javascript/javascript_85970.html

结合GPT给出回答如下请题主参考
在Node.js中,可以使用不同的路由和请求处理程序来区分和处理不同的请求。以下是一个简单的例子:

const http = require('http');
const url = require('url');

function handleRequest(req, res) {
  const pathName = url.parse(req.url).pathname;

  if (pathName === '/login') {
    // 执行登录请求处理程序
    handleLogin(req, res);
  } else if (pathName === '/signup') {
    // 执行注册请求处理程序
    handleSignup(req, res);
  } else if (pathName === '/search') {
    // 执行搜索请求处理程序
    handleSearch(req, res);
  } else {
    // 处理其他请求
    res.writeHead(404, { 'Content-Type': 'text/plain' });
    res.end('404 Not Found');
  }
}

function handleLogin(req, res) {
  // 处理登录请求
  // 从req中获取用户提交的用户名和密码
  const username = req.body.username;
  const password = req.body.password;
  
  // 验证用户名和密码是否正确,如果正确则返回登录成功的信息
  if (isValidUser(username, password)) {
    res.writeHead(200, { 'Content-Type': 'text/plain' });
    res.end('Login successful!');
  } else {
    res.writeHead(401, { 'Content-Type': 'text/plain' });
    res.end('Invalid username or password');
  }
}

function isValidUser(username, password) {
  // 验证用户名和密码是否正确
  // 连接数据库,查询用户信息
  // 如果用户名和密码正确则返回true,否则返回false
  // ...
}

const server = http.createServer(handleRequest);
server.listen(8080);

在上面的代码中,handleRequest()函数用于处理所有的请求,根据不同的URL路径选择执行不同的请求处理程序,例如handleLogin()处理登录请求。在handleLogin()中,我们可以从req.body中获取提交的用户名和密码,并进行验证。如果验证通过,则返回登录成功的信息;如果验证失败,则返回错误信息。

当然,这只是一个简单的例子,实际的项目中可能需要更复杂的请求处理逻辑。同时,你也可以使用Express等Web框架来简化请求处理和路由设置。

引用 皆我百晓生 小程序回复内容作答:
在Node.js中,可以通过不同的HTTP请求方法来区分和处理不同的请求。常用的HTTP请求方法有GET、POST、PUT、DELETE等。

要实现不同的请求,可以使用Express框架提供的路由功能。通过定义不同的路由处理函数,可以针对不同的URL和请求方法进行处理。

在你的代码中,已经使用了路由来处理不同的请求。例如,使用app.get来处理GET请求,使用app.post来处理POST请求。你可以根据需要添加其他的路由处理函数来处理其他类型的请求。

对于你的第一个问题,如果你想在index.html页面中使用按钮实现AJAX查询,你可以使用xhr.open('GET', 'url', true)来发送GET请求。其中,'url'是你要查询的接口的URL。

对于你的第二个问题,如果想要在login.html页面得到登录失败的信息而不是跳转到新页面,你可以通过在登录失败时发送一个包含错误信息的响应来实现。例如,在登录失败的情况下,你可以使用res.send('登录失败的信息')来发送错误信息给客户端。客户端可以通过接收到的响应来判断登录是否失败并做相应处理。

希望对你有帮助!

使用ajax进行局部刷新页面就不会刷新当前整个界面了,https://blog.csdn.net/bug_producter/article/details/114274387。