【问题标题】:Express node.js api app.post does work for / but not with /pathExpress node.js api app.post 确实适用于 / 但不适用于 /path
【发布时间】:2021-06-18 17:20:06
【问题描述】:

我是 Node.js 的新手,我正在尝试制作一个 API,可以在 sql server 中执行 CRUD 操作。对我来说问题是我可以获取数据但不能发布它,并得到错误“无法获取/”。我知道关于这个主题有类似的问题,但对我没有任何作用,所以我想我的代码可能有不同类型的错误。任何帮助将不胜感激,并以某种方式挽救我的生命。另外,这是我关于stackoverflow的第一个问题,对可能出现的错误深表歉意..

这里是 server.js

const sql = require('mssql');
const express = require('express');
const bodyParser = require('body-parser');
var port = process.env.port || 5000;
const sqlConfig = require('./connection/connect') 
const app = express();

app.use(express.json()); // json desteklemesi için
app.use(express.urlencoded({ extended: true })); 


app.get("/test", (req, res, next) => {
    new sql.ConnectionPool(sqlConfig).connect()
        .then(pool => {
            return pool.query('select * from tblProfile')
        })
        .then(result => {
            res.send(result);
        })

})
app.post('/test', (req, res) => {
    let name = req.query.name;
    let lastname = req.query.lastname;
    let email = req.query.email;
    let password = req.query.password;
    let sql = "INSERT INTO tblProfile(name,lastname,email,password) VALUES(? ? ? ?)";
    conn.query(sql, [name, lastname, email, password], (err, result) => {
        if (err) throw err;
        res.write("inserted.");
        res.end();
    });

    app.listen(port, () => {
        console.log("working: " + port)
    })
});

这是 connect.js

   

var sqlConfig = {

    server: '192.168.1.2',
    database: 'profile',
    user: 'username',
    password: 'user',

};

module.exports = sqlConfig;

【问题讨论】:

    标签: javascript node.js api express


    【解决方案1】:

    发生这种情况是因为您没有响应或向该路由发送任何内容

    所以如果你想摆脱错误 运行

    app.get('/', (req,res)=>{
       res.send('hello world')
    }
    

    但是如果你想发送一个静态文件到路由 创建一个文件夹调用 public *注意它可以是任何东西

    然后输入

    var path = require('path');
    app.use(express.static(path.join(__dirname, 'public')));
    
    

    然后就可以访问目录中的代码了

    至于写作,我认为你应该试试这个

    app.post('/test', (req, res) => {
        let name = req.body.name;
        let lastname = req.body.lastname;
        let email = req.body.email;
        let password = req.body.password;
        let sql = "INSERT INTO tblProfile(name,lastname,email,password VAUES(? ? ? ?)";
        conn.query(sql, [name, lastname, email, password], (err, result) => {
            if (err) throw err;
            res.write("inserted.");
            res.end();
        });
    
    

    将查询更改为正文 既然你安装了 body-parser

    【讨论】:

    • 您没有安装path 模块。它是 nodejs 内置的。
    • @Ogoh.cyril 嗨,感谢您的努力,感谢。对于您所做的正文解析器部分,我对其进行了更正。我想要做的是将数据发布到数据库,我可以获取但不能发布它,我应该在哪里添加您在第一部分中指定的代码?我应该完全改变get方法吗?对不起,如果这个问题很愚蠢..
    • 不只是添加第一种方法与您的发布路线无关-----您可以评论您的
      标签
    • 您好,我使用您所说的第一个解决方案解决了问题,并稍微更改了查询。谢谢
    【解决方案2】:

    快速查看您的代码,我能看到的唯一问题是您提交数据的查询。在您的查询语句中,我在要输入数据库的变量后添加了一个右括号,并对单词 Values 进行了错字更正。我还更改了从 req.query 中检索数据的方式,以对其进行解构,并简化代码。根据我看到的所有其他内容,以及您能够从数据库中获取数据的事实,这应该可以正常工作。如果没有,我建议在 post 查询中插入一些 console.log() 语句,以查看可能出现问题的位置以及原因。例如,您可以在 post 路由中运行 console.dir(req.query); 以查看实际来自 req 的数据并确保它们都在那里。如果缺少某些内容,则查询将不会实际执行。如果这不起作用,请告诉我,以及您所做的任何控制台日志中的信息,我会再看一遍。

    const sql = require('mssql');
    const express = require('express');
    const bodyParser = require('body-parser');
    var port = process.env.port || 5000;
    const sqlConfig = require('./connection/connect') 
    const app = express();
    
    app.use(express.json()); // json desteklemesi için
    app.use(express.urlencoded({ extended: true })); 
    
    
    app.get("/test", (req, res, next) => {
        new sql.ConnectionPool(sqlConfig).connect()
            .then(pool => {
                return pool.query('select * from tblProfile')
            })
            .then(result => {
                res.send(result);
            })
    
    })
    app.post('/test', (req, res) => {
        //console.dir(req.query);
        let {name, lastname, email, password} = req.query;
        let sql = "INSERT INTO tblProfile(name,lastname,email,password) VALUES(? ? ? ?)";
        conn.query(sql, [name, lastname, email, password], (err, result) => {
            if (err) throw err;
            res.write("inserted.");
            res.end();
        });
    
        app.listen(port, () => {
            console.log("working: " + port)
        })
    });

    【讨论】:

    • 您好,感谢您的回复。正如你所说,我写了 console.dir(req.query) 但没有得到回应。另外,我意识到我也无法在控制台中获取任何名称、姓氏、电子邮件或密码。我从邮递员那里发送数据,但无法获取任何内容。使用 app.get 获取数据仍然没有问题。这是否意味着数据没有到达 node.js?可能是邮递员的问题?提前致谢。
    • 因此,如果您无法将任何数据输出到控制台,则意味着它们在req.query 中没有任何内容。尝试运行console.dir(req) 看看它提供了什么。如果您成功地将数据发送到此 post 路由,则控制台中应该会出现 req.可能就像 Ogoh.cyril 在他的回答中所说的那样,数据实际上位于req.body 中。无论哪种方式,请将您用于调用 app.post 路由的代码添加到原始问题,以便我们更好地了解您如何发送数据。
    猜你喜欢
    • 1970-01-01
    • 2015-04-16
    • 2021-03-04
    • 1970-01-01
    • 2014-04-03
    • 1970-01-01
    • 1970-01-01
    • 2021-09-20
    • 1970-01-01
    相关资源
    最近更新 更多