【问题标题】:NodeJS Output user in browserNodeJS在浏览器中输出用户
【发布时间】:2018-03-25 17:22:57
【问题描述】:

我做了一个项目,我在其中包含了我在 mysql 上编写的数据库,它从数据库中创建了一个 json 文件,并在浏览器中输出所有用户,但我有一些问题。我想输出一个用户我该怎么做(这是它必须如何输出http://localhost:8080/user/1 的示例)。我用快递和mysql。请帮我。谢谢。

这是我的代码:

'use strict';
const mysql = require('mysql');
const express = require('express');
const http = require('http');
const router = express()

// http://nodejs.org/docs/v0.6.5/api/fs.html#fs.writeFile
const fs = require('fs');

const connection = mysql.createConnection({
    host: 'localhost',
    user: 'lado',
    password: '1234'
});

connection.connect();

connection.query('SELECT * FROM bankdb.account;', function(err, results, fields) {
    if(err) throw err;

    fs.writeFile('account.json', JSON.stringify(results), function (err) {
        if (err) throw err;
        console.log('Saved!');
    });
    connection.end();
});


const pool = mysql.createPool({
    host: 'localhost',
    user: 'lado',
    password: '1234',
    database: 'bankdb',
    charset: 'utf8'
});
var reo ='<html><head><title>Output From MYSQL</title></head><body><h1>Output From MYSQL</h1>{${table}}</body></html>';
function setResHtml(sql, cb){
    pool.getConnection((err, con)=>{
        if(err) throw err;

        con.query(sql, (err, res, cols)=>{
            if(err) throw err;

            var table =''; //to store html table

            //create html table with data from res.
            for(var i=0; i<res.length; i++){
                table +='<tr><td>' + (i+1) +'</td><td>'+ res[i].name +'</td><td>'+ res[i].address +'</td></tr>';
            }
            table ='<table border="1"><tr><th>ID</th><th>Name</th><th>Amount</th></tr>'+ table +'</table>';

            con.release(); //Done with mysql connection

            return cb(table);
        });
    });
}

const sqll ='SELECT * FROM bankdb.account';

const server = http.createServer((req, res)=>{
    setResHtml(sqll, resql=>{
        reo = reo.replace('{${table}}', resql);
        res.writeHead(200, {'Content-Type':'text/html; charset=utf-8'});
        res.write(reo, 'utf-8');
        res.end();
    });
});

server.listen(8080, ()=>{
    console.log('Server running at //localhost:8080/');
    router.get('/users/:id', function(req, res, next) {
        var user = users.getUserById(req.params.id);
        res.json(user);
    });
    exports.getUserById = function(id) {
        for (var i = 0; i < users.length; i++) {
            if (users[i].id == id) return users[i];
        }
    };
});

【问题讨论】:

    标签: mysql node.js database


    【解决方案1】:

    只需根据他们的 id 获取特定用户:

    router.get( '/user/:id', function( req, res ) { // When visiting '/user/:id'
    
       var id = req.params.id; // For example if you visit localhost/user/24 the id will be 24
    
       connection.query('SELECT * FROM bankdb.account WHERE id=' + mysql.escape( id ), function(err, results, fields) {
           if(err) throw err;
    
           fs.writeFile('account.json', JSON.stringify(results), function (err) {
             if (err) throw err;
             console.log('Saved!');
           });
           connection.end();
       });
    
    } );
    

    如果你从数据库中获取每个用户,你的程序会占用更多的内存。

    只需抓住你需要的那个并与他一起工作。

    【讨论】:

    • 我应该把它添加到server.listen(8080, ()=&gt;{...} 吗?因为当我在这里添加它时,我会显示所有用户(我输入了这个http://localhost:8080/user/1)对不起我只是初学者
    • 不用担心。如果我是你,我会把它放在server.listen() 之外。我通常把所有的router.get()router.post()等方法都放在server.listen()之前。另外,我不知道你的数据库是什么样的。只要确保每个用户都有一个id 字段。这样您就可以根据他们的用户 ID 搜索数据库。
    • 它应该可以正常工作。如果您访问该网站,您将不会得到任何响应,但应创建一个新文件。
    • 哦,好吧。谢谢)
    猜你喜欢
    • 1970-01-01
    • 2015-10-23
    • 1970-01-01
    • 1970-01-01
    • 2017-08-23
    • 2013-11-22
    • 1970-01-01
    • 2021-03-01
    • 2019-06-13
    相关资源
    最近更新 更多