首页 > 解决方案 > Node.js 使用 XMLHttpRequest POST 404 错误

问题描述

我遇到 Node.js POST 方法错误 404 错误。细节:

系统平台:Windows 7 Ultimate 中控:XAMPP V3.2.4 Apache:PHP5.2 Node.js:node-v11.0.0-x64.msi 节点模块镜像:节点模块目录

文件: app.js

var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
var oracledb = require('oracledb');

var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');

var app = express();


app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', indexRouter);
app.use('/users', usersRouter);
app.use(function(err, req, res, next) {
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : {};
res.status(err.status || 500);
res.render('error');
});
app.listen(3000,function(){
console.log('listening port 3000');
});
module.exports = app;

登录.js

<!DOCTYPE html>
<html lang="zh-cn"  class="login">
<head>
<meta charset="UTF-8">
<title>Node Blog</title>
<meta name="keywords" content="Node,Node.js">
<link rel="stylesheet" href="/css/normalize.css">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
</head>
<body>
<section>
<form action="/login" method="POST">
    <div class="form-group">
        <input type="text" name="name" placeholder="登录名&quot; onBlur="getData()">
<script type="text/javascript">
   
    var url = 'http://localhost:3000/login';

    function getData() {
        let xhr = new XMLHttpRequest();
        xhr.onreadystatechange = function () {
        document.write('readyState:');//4 sentences for testing execute result as below:
        document.write(this.readyState);
        document.write('status:');
        document.write(this.status);
            if (this.readyState == 4 && this.status == 200) {
                 document.write('readyState and status are OK');
            }
        };
      
        xhr.open('POST',url,false);
        xhr.send("username=[user]&password=[password]");
    }
      </script>
        <%if(message){%>
        <p><%=message%></p>
        <%}%>
       </div>
       <div class="form-group">
        <input type="password" name="password" placeholder="密码">
 
    </div>
    <div class="form-group">
        <input type="submit" value="登录">
    </div>
</form>
</section>

</body>
</html>

index.js

var express = require('express');
var indexmain = express.Router();
var crypto = require('crypto');
var oracledb = require('oracledb');
var http = require('http');
var url = require('url');
var querystring=require("querystring");

indexmain.post('/login', function(req, res, next) {
    http.createServer(function(req,res){
    res.setHeader("Access-Control-Allow-Methods", "GET,POST");
    res.setHeader("X-Powered-By","3.2.1");
    res.setHeader("Content-Type","application/json;charset=utf-8");
    let data='';
    console.log('接收到请i去。。。。');
    document.write('createSerrver is connected');// for output the result of testing OK.
    //接收数据
    req.on('data',function(chunk){
      data+=chunk;
    });
    //接受完毕
    req.on('end',function(){
    
    var arr=data.split('&');
    let name,password;//保存前端传递来的数据
    arr.forEach(function(item){
        let arr0=item.split('=');
        if(arr0[0]=='username'){
            name=arr0[1];
        }else if(arr0[0]=='password'){
            password=arr0[1];
        }
     });
  
    //将数据存入数据库
    saveData(name,password,function(msg){
        res.write(JSON.stringify(msg));
        res.end();
     });
   });
});

function saveData(name,password){

   oracledb.getConnection(
   {
        user          : [user],
        password      : [password],
        connectString : [connectString]
   },
   function(err, connection)
   {
    if (err) {
        console.error(err.message);
        return;
    }
    else{
        console.log('connect OK!');

        var name = req.body.name;
        var password = req.body.password;
        var hash = crypto.createHash('md5');
        var message;
        hash.update(password);
    
   
        connection.execute(
            'SELECT NAME,PASSWORD FROM GUEST',  // bind value for :id
            
            function(err, result)
            {
                if (err) {
                    console.error(err.message);
                    return;
                }
                
                var columnslength=result.rows[0].length;
                var judge = 0;//判断用户名是否存在
                for(var i=0;i<result.rows.length;i++){
                    if(name==result.rows[i][0]){
                        judge=1;
                        if(password==result.rows[i][columnslength-1]){
                            
                            res.render('index',{title:"Express"});
                            break;
                        }
                        else{
                            res.render('login',{message:'Password is not correct'});
                            break;
                        }
                    
                    }else{
                        continue;
                    }
                    
                }
                if (judge == 0){
                    res.render('login',{message:'Username is not correct'});
                }
            }
        ) 
        
    }   
}
  
};
});

/* GET home page. */
indexmain.get('/login', function(req, res, next) {
 res.render('login', { message: 'hello' });
});

module.exports = indexmain;

主页

主页

控制台窗口

在此处输入图像描述 在此处输入图像描述

问题 1.login.js没有接收数据说明:在index.js中,createServer()无法从login.js获取'xhr.send("username=[username]&password=[password]")'。(测试:不能执行以下语句)

document.write('createSerrver is connected');

2.status 0,404 error 说明:在第二张图片中,输出显示状态。状态继续停止在 '0' 或 '404' 。

我分析了上面的错误,得出如下结论:

  1. php.ini 或 httpd.conf 应该使用一些关于 http 的参数进行修改。
  2. 在编程中,存在一些问题。

您能帮我修改 Apache 中的一些设置或编程中的代码吗?(程序的编译不存在错误)

陈超

chougou1982@hotmail.com 15021734016@139.com

标签: node.jsxmlhttprequest

解决方案


推荐阅读